在Python中使用OpenCV繪畫和素描

2022-01-09 相約機器人

來源 | Medium

編輯 | 代碼醫生團隊

OpenCV是功能強大的計算機視覺庫,具有強大的圖像處理工具包。在本文中將利用它來創建繪圖和繪畫,其中大多數將使用內置功能!簡短介紹一下,直接進入令人興奮的部分。

目錄

要求

油畫效果

水彩效果

黑色和白色和彩色的鉛筆素描

點畫藝術

要求

油畫效果需要使用OpenCV Contrib模塊,而其他模塊可以使用OpenCV的標準發行版執行。除此之外,點畫藝術還需要Sklearn和Scipy。

pip install opencv-contrib-python==4.3.0.36

pip install scikit-learn

pip install scipy

油畫效果

它包括在內cv2.xphoto(),還具有其他一些很酷的功能,例如圖像修復,白平衡,圖像去噪等。

import cv2

img = cv2.imread('img.jpg')

res = cv2.xphoto.oilPainting(img, 7, 1)

原始圖片

油畫效果

水彩效果

像油畫效果一樣,水彩效果也可以用單行代碼完成,但不包括導入和圖像讀取。

cv2.stylization()。

import cv2

img = cv2.imread('img.jpg')

res = cv2.stylization(img, sigma_s=60, sigma_r=0.6)

# sigma_s controls the size of the neighborhood. Range 1 - 200

# sigma_r controls the how dissimilar colors within the neighborhood will be averaged. A larger sigma_r results in large regions of constant color. Range 0 - 1

水彩效果

黑白和彩色鉛筆素描

同樣,只需一行代碼,我們就可以得到灰度和彩色的出色草圖。

import cv2

img = cv2.imread('img.jpg')

dst_gray, dst_color = cv2.pencilSketch(img, sigma_s=60, sigma_r=0.07, shade_factor=0.05)

# sigma_s and sigma_r are the same as in stylization.

# shade_factor is a simple scaling of the output image intensity. The higher the value, the brighter is the result. Range 0 - 0.1

黑白素描

彩色的素描

點畫藝術

根據維基百科,點畫藝術可以定義為:

點畫法是一種繪畫技術,在該技術中,將小而獨特的顏色點應用到圖案中以形成圖像

要在Python中執行此操作,第一步是計算使用Kmeans的最常用顏色。使用的調色板為20,這意味著圖像中將出現20種最常用的顏色來構成點。根據圖像尺寸為點計算合適的半徑尺寸。然後,遍歷圖像並找到最接近點的顏色,並以此繪製圓圈。

import scipy.spatial

import numpy as np

import random

import cv2

import math

from sklearn.cluster import KMeans

def compute_color_probabilities(pixels, palette):

    distances = scipy.spatial.distance.cdist(pixels, palette)

    maxima = np.amax(distances, axis=1)

distances = maxima[:, None] - distances

    summ = np.sum(distances, 1)

    distances /= summ[:, None]

    return distances

def get_color_from_prob(probabilities, palette):

    probs = np.argsort(probabilities)

    i = probs[-1]

    return palette[i]

def randomized_grid(h, w, scale):

    assert (scale > 0)

    r = scale//2

    grid = []

    for i in range(0, h, scale):

        for j in range(0, w, scale):

            y = random.randint(-r, r) + i

            x = random.randint(-r, r) + j

    grid.append((y % h, x % w))

    random.shuffle(grid)

    return grid

def get_color_palette(img, n=20):

    clt = KMeans(n_clusters=n)

    clt.fit(img.reshape(-1, 3))

return clt.cluster_centers_

def complement(colors):

    return 255 - colors

def create_pointillism_art(image_path, primary_colors):



    img = cv2.imread(image_path)

    radius_width = int(math.ceil(max(img.shape) / 1000))

    palette = get_color_palette(img, primary_colors)

    complements = complement(palette)

    palette = np.vstack((palette, complements))

    canvas = img.copy()

    grid = randomized_grid(img.shape[0], img.shape[1], scale=3)



    pixel_colors = np.array([img[x[0], x[1]] for x in grid])



    color_probabilities = compute_color_probabilities(pixel_colors, palette)

for i, (y, x) in enumerate(grid):

        color = get_color_from_prob(color_probabilities[i], palette)

        cv2.ellipse(canvas, (x, y), (radius_width, radius_width), 0, 0, 360, color, -1, cv2.LINE_AA)

    return canvas

res = create_pointillism_art('img.jpg', 20)

原始圖片

結果

點畫藝術的代碼受此GitHub存儲庫的啟發而進行了一些更改。

https://github.com/atriwal/Points_Art

因此發現使用OpenCV進行藝術創作很容易,尤其是使用內置功能時。如果要查看使用OpenCV進行圖像編輯的操作,可以參考本文:

https://medium.com/dataseries/designing-image-filters-using-opencv-like-abode-photoshop-express-part-1-8765e3f4495b

推薦閱讀

使用深度學習和OpenCV的早期火災探測系統

點擊「閱讀原文」圖書配套資源

相關焦點

  • 使用OpenCV進行圖像編輯--繪畫和素描
    油畫效果需要使用OpenCV Contrib模塊,而其他模塊可以使用OpenCV的標準發行版執行。
  • 測試~python庫介紹(一) opencv
    從事測試工作已有4年了,期間通過python編寫了很多自動化腳本,接下來的日子和大家分享一下測試工作上常用的python庫,適合常年從事黑盒測試的同學了解一些入門級技巧
  • 「python opencv 計算機視覺零基礎實戰」第一節
    前置條件說明:本系列opencv實戰教程將從基礎到實戰,若只是簡單學習完python也可以通過該教程完成一般的機器學習編程;文中將會對很多python的基礎內容進行講解,但由於文章定位的原因將不會贅述過多的基礎內容,基礎內容進行第一次講解後第二次將不會過多贅述,本文主要講解的是opencv相關知識。
  • python 基於opencv 繪製圖像輪廓
    這篇文章主要介紹了python 基於opencv 繪製圖像輪廓的示例,幫助大家更好的利用python的opencv庫處理圖像,感興趣的朋友可以了解下
  • Python OpenCV查找圖中的四邊形/矩形
    實例來源於OpenCV自帶歷程,這裡以OpenCV4.2為例,路徑為:F:\opencv4.2_release\opencv
  • python opencv 人臉識別
    本機環境:python 2.7mac 系統opencv 2.4.6python版本一定要安裝 2 的才行 ,版本 3 沒有 cv2 庫識別圖片原圖識別後的圖#!/usr/bin/env python# encoding: UTF-8"""Cteate time 2017-03-31author: 天才小三斤@mail: lauixData@gmail.com@blog: http://www.fucksec.com"""import cv2
  • 使用visual studio或msys2(mingw64)與VS Code編譯並使用openCV
    Windows系統下OpenCV及第三方庫文件的使用與下載如果沒有特殊要求,在Windows系統下可以直接使用OpenCV的預編譯版本。在github的opencv項目release中選擇相應release版本即可。然而,由於版權原因,預編譯的opencv並沒有包含諸多第三方工具,因此,如果要使用一些第三方工具,或者要在linux系統下使用openCV的話,還需要自己從源碼進行編譯。
  • 「python opencv視覺零基礎」十、圖片效果毛玻璃
    一、學習目標了解高斯模糊的使用方法了解毛玻璃的圖片效果添加了解如何自己做一個噪聲圖片目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰
  • 「python opencv視覺零基礎實戰」七邏輯運算應用
    一、學習目標了解opencv中圖像的邏輯運算了解opencv中邏輯運算的應用如有錯誤歡迎指出~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python
  • python利用opencv實現證件照換底
    opencv今天就給大家介紹一下python利用opencv庫進行藍底換紅底或者白底照片的操作。1.強大的opencv庫說到圖像處理,不得不提opencv庫。它是一個跨平臺的計算機視覺庫,可以運行在不同作業系統上,它由一些列c函數和少量c++函數組成,並提供python,matlab等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。
  • 使用Python和OpenCV檢測圖像中的多個亮點
    原文連結:https://www.pyimagesearch.com/2016/10/31/detecting-multiple-bright-spots-in-an-image-with-python-and-opencv/今天的博客文章是我幾年前做的一個關於尋找圖像中最亮點的教程的後續。
  • 使用OpenCv和Dlib進行打哈欠檢測
    打哈欠檢測與應用打哈欠檢測就是使用OpenCV和Dlib來檢測打哈欠(由於疲勞或無聊而張大嘴巴深吸氣)。可廣泛應用於自駕車、駕駛員疲勞檢測、駕駛員睡意檢測、駕駛員意識檢測等領域。安裝OpenCv和Dlib庫OpenCv的安裝如下:pip install opencv-pythonDlib的安裝如下:pip install cmakepip install dlib導入Opencv,Dlib和Numpy庫設置dat文件我們將.dat文件放置到工作目錄中,它是一個可以識別面部特徵並提供信息的模型
  • 使用OpenCV+Python進行人臉識別
    所以在這個問題中,與人臉相關的向量是相似的,或者我們可以說它們在向量空間中非常接近。至此,我們已經了解了這個網絡是如何工作的,讓我們看看如何在我們自己的數據上使用這個網絡。在這裡,我們將數據中的所有圖像傳遞給這個預訓練的網絡,以獲取相應的嵌入並將這些嵌入保存在文件中以備下一步使用。3. 人臉對比我們在文件中保存了數據中每個人臉的人臉嵌入,下一步是識別不在我們數據中的新圖像。
  • 素描繪畫中,關於炭筆和鉛筆的使用方法!
    喜歡素描的朋友們,我們每天都有素描直播公開課,歡迎大家關注肯博說畫,快來找我領取免費的學習資料吧。這次和大家分享的是在基本的素描繪畫中,炭筆和鉛筆的各種不同的區別和使用方法,有需要的小夥伴就一起看下去吧。炭筆和鉛筆的區別材料不同,炭筆內芯的材料是木炭,木炭主要來源燃燒處理過後的木材。
  • 使用OpenCV+Python進行圖像處理的初學者指南
    圖像中可能隱藏著很多信息,我們可以用不同的方式和視角來解釋它。那麼,什麼是圖像,如何處理圖像?簡而言之,我們可以說圖像是事物的視覺表示,可以使用計算機視覺輕鬆處理(從機器學習的角度來看)。視頻呢?視頻可以描述為一組移動圖像或連續幀的記錄。
  • 樹莓派3b編譯安裝完整OpenCV-3.4.1 for Python3
    具體細節請參考我在愛板論壇的另一篇帖子:樹莓派搭建基於Python3和OpenCV實現的解魔方機器人二、OpenCV-3.4.1和OpenCV_Contrib-3.4.1源文件下載這裡大家可以去官網下載,直接分享下載連結:https://github.com/opencv/opencv/archive/3.4.1.ziphttps
  • 基於Python生成鉛筆素描圖
    基於Python的鉛筆素描圖昝道廣概述前言思考彩色圖像和鉛筆素描對比素描一刻
  • 使用Python將圖片變成鉛筆素描
    那麼問題來了,你可以使用一隻鉛筆和一張畫紙來完成一張素描照,但這花費的時間也不在少數,而且你還得具備畫畫的潛力。還有一種選擇,那就是用一張圖片,使用PS將此圖片轉換成素描,這也很簡單(【圖像】——>【調整】——>【去色】和【反相】以及【濾鏡】——>【其他】——>【最小值】)再合併圖層就可將照片轉化為素描照。是不是很簡單?別說你不會哦,你會的只是PhotoShop!
  • 基於opencv 的圖像處理入門教程
    /代碼和樣例圖片的地址:https://github.com/ccc013/CodesNotes/tree/master/opencv_noteshttps://github.com/ccc013/CodesNotes/blob/master/opencv_notes/opencv_image_process_tutorial.ipynb
  • 使用OpenCV校準魚眼鏡頭
    點擊上方「小白學視覺」,選擇加"星標