校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 利用Opencv實現圖片的油畫特效實例

利用Opencv實現圖片的油畫特效實例

熱門標簽:舉辦過冬奧會的城市地圖標注 電銷機器人系統廠家鄭州 螳螂科技外呼系統怎么用 阿里電話機器人對話 qt百度地圖標注 正安縣地圖標注app 400電話申請資格 地圖地圖標注有嘆號 遼寧智能外呼系統需要多少錢

一、方法原理(步驟)

1.將彩色圖片轉換為灰度圖片(調用opencv的cvtColor()方法);

2.將圖片分割為若干個小方塊,后面會統一小方塊中每一個像素的灰度值;

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

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

5.用上一步得到的每個小方塊的均值,來替換每個小方塊中的所有像素值,即可實現油畫效果。

二、代碼實現

首先導入包:

import numpy as np
import cv2

讀取原圖,得到原圖的寬高信息:

img=cv2.imread('ziliao/image00.JPG',1)
imInfo=img.shape
height=imInfo[0]
width=imInfo[1]

完成彩色圖片向灰度圖片的轉化:

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
'''該函數用于顏色的轉換,第一個參數為待處理的原圖,
第二個參數表示轉換的顏色'''

本實例中將圖片分割為若干個8×8的小方塊,將0-255的灰度值分為8個等級,下面定義了一個數組array1來裝載這8個等級中的像素個數,然后找出每個小方塊中包含最多像素的等級,如下:

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): #計算8*8小方塊中的array1的值
      for n in range(-4,4):
        p1 = int(gray[i + m, j + n] / 32) #除以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)

三、運行結果

左為原圖

四、完整代碼

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)

總結

到此這篇關于利用Opencv實現圖片的油畫特效實例的文章就介紹到這了,更多相關Opencv圖片油畫特效內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • OpenCV-Python實現油畫效果的實例

標簽:合肥 興安盟 隨州 淘寶好評回訪 阜新 昭通 濟源 信陽

巨人網絡通訊聲明:本文標題《利用Opencv實現圖片的油畫特效實例》,本文關鍵詞  利用,Opencv,實現,圖片,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《利用Opencv實現圖片的油畫特效實例》相關的同類信息!
  • 本頁收集關于利用Opencv實現圖片的油畫特效實例的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 霍城县| 和静县| 合肥市| 镇远县| 华阴市| 仁化县| 获嘉县| 莱州市| 万源市| 札达县| 贡嘎县| 定州市| 香港 | 永和县| 大埔区| 杨浦区| 阳西县| 开远市| 茶陵县| 沈阳市| 海城市| 宝丰县| 静安区| 井研县| 沧州市| 广州市| 新郑市| 鄂温| 巢湖市| 玉树县| 吴江市| 克山县| 灵山县| 平阴县| 泰州市| 措勤县| 滕州市| 台南县| 微山县| 固安县| 日土县|