十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)使用Opencv怎么實(shí)現(xiàn)一個(gè)圖片油畫特效,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

首先導(dǎo)入包:
import numpy as np import cv2
讀取原圖,得到原圖的寬高信息:
img=cv2.imread('ziliao/image00.JPG',1)
imInfo=img.shape
height=imInfo[0]
width=imInfo[1]完成彩色圖片向灰度圖片的轉(zhuǎn)化:
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) '''該函數(shù)用于顏色的轉(zhuǎn)換,第一個(gè)參數(shù)為待處理的原圖, 第二個(gè)參數(shù)表示轉(zhuǎn)換的顏色'''
本實(shí)例中將圖片分割為若干個(gè)8×8的小方塊,將0-255的灰度值分為8個(gè)等級(jí),下面定義了一個(gè)數(shù)組array1來裝載這8個(gè)等級(jí)中的像素個(gè)數(shù),然后找出每個(gè)小方塊中包含最多像素的等級(jí),如下:
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) dst=np.zeros((height,width,3),np.uint8) for i in range(4,height-4): for j in range(4,width-4): array1 = np.zeros(8, np.uint8) #用于存儲(chǔ)每個(gè)灰度等級(jí)的像素個(gè)數(shù) for m in range(-4, 4): #計(jì)算8*8小方塊中的array1的值 for n in range(-4,4): p1 = int(gray[i + m, j + n] / 32) #除以32得到該點(diǎn)應(yīng)該位于第幾個(gè)灰度等級(jí) array1[p1] = array1[p1] + 1 currentMax = array1[0] l = 0 for k in range(0,8): #找到像素點(diǎn)最多的那個(gè)灰度等級(jí) if currentMax=(l*32) and gray[i+m,j+n]<=((l+1)*32): (b,g,r) = img[i+m,j+n] dst[i,j] = (b,g,r) cv2.imshow('img',img) cv2.imshow('dst',dst) cv2.waitKey(0)
左為原圖

import numpy as np
import cv2
img=cv2.imread('ziliao/image00.png',1)
imInfo=img.shape
height=imInfo[0]
width=imInfo[1]
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
dst=np.zeros((height,width,3),np.uint8)
for i in range(4,height-4):
for j in range(4,width-4):
array1 = np.zeros(8, np.uint8)
for m in range(-4, 4):
for n in range(-4,4):
p1 = int(gray[i + m, j + n] / 32)
array1[p1] = array1[p1] + 1
currentMax = array1[0]
l = 0
for k in range(0,8):
if currentMax=(l*32) and gray[i+m,j+n]<=((l+1)*32):
(b,g,r) = img[i+m,j+n]
dst[i,j] = (b,g,r)
cv2.imshow('img',img)
cv2.imshow('dst',dst)
cv2.waitKey(0) 上述就是小編為大家分享的使用Opencv怎么實(shí)現(xiàn)一個(gè)圖片油畫特效了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。