主頁(yè) > 知識(shí)庫(kù) > 利用Opencv實(shí)現(xiàn)圖片的油畫(huà)特效實(shí)例

利用Opencv實(shí)現(xiàn)圖片的油畫(huà)特效實(shí)例

熱門標(biāo)簽:舉辦過(guò)冬奧會(huì)的城市地圖標(biāo)注 電銷機(jī)器人系統(tǒng)廠家鄭州 螳螂科技外呼系統(tǒng)怎么用 阿里電話機(jī)器人對(duì)話 qt百度地圖標(biāo)注 正安縣地圖標(biāo)注app 400電話申請(qǐng)資格 地圖地圖標(biāo)注有嘆號(hào) 遼寧智能外呼系統(tǒng)需要多少錢

一、方法原理(步驟)

1.將彩色圖片轉(zhuǎn)換為灰度圖片(調(diào)用opencv的cvtColor()方法);

2.將圖片分割為若干個(gè)小方塊,后面會(huì)統(tǒng)一小方塊中每一個(gè)像素的灰度值;

3.將0-255的灰度值劃分為幾個(gè)等級(jí),并把上一步處理的結(jié)果映射到這些范圍內(nèi)。例如0-255一共256個(gè)灰度等級(jí),把它劃分為四個(gè)段,即每段有64個(gè)灰度等級(jí)(0-63為第一段,64-127為第二段,128-191為第三段,192-255為第四段);

4.找到每個(gè)小方塊中,最多灰度等級(jí)的所有像素,并求這些像素的均值;

5.用上一步得到的每個(gè)小方塊的均值,來(lái)替換每個(gè)小方塊中的所有像素值,即可實(shí)現(xiàn)油畫(huà)效果。

二、代碼實(shí)現(xiàn)

首先導(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來(lái)裝載這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 currentMaxarray1[k]:
        currentMax = array1[k]
        l = k
     #以下方法是簡(jiǎn)化處理了,也可以按前文所說(shuō)的那樣求均值處理
    for m in range(-4,4):
      for n in range(-4,4):
        if gray[i+m,j+n]>=(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)

三、運(yùn)行結(jié)果

左為原圖

四、完整代碼

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 currentMaxarray1[k]:
        currentMax = array1[k]
        l = k
    for m in range(-4,4):
      for n in range(-4,4):
        if gray[i+m,j+n]>=(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)

總結(jié)

到此這篇關(guān)于利用Opencv實(shí)現(xiàn)圖片的油畫(huà)特效實(shí)例的文章就介紹到這了,更多相關(guān)Opencv圖片油畫(huà)特效內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • OpenCV-Python實(shí)現(xiàn)油畫(huà)效果的實(shí)例

標(biāo)簽:合肥 興安盟 隨州 淘寶好評(píng)回訪 阜新 昭通 濟(jì)源 信陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《利用Opencv實(shí)現(xiàn)圖片的油畫(huà)特效實(shí)例》,本文關(guān)鍵詞  利用,Opencv,實(shí)現(xiàn),圖片,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《利用Opencv實(shí)現(xiàn)圖片的油畫(huà)特效實(shí)例》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于利用Opencv實(shí)現(xiàn)圖片的油畫(huà)特效實(shí)例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章