制作油畫(huà)效果的步驟如下:
- 讀取維度信息
- 讀取灰度圖片
- 求最大灰度段中各通道值
- 顏色封裝
- 顯示油畫(huà)效果圖
# 1 gray 2 7*7 or 10*10 3 灰度等級(jí)的劃分 0~255
# 4 count 5 dst = result
import cv2
import numpy as np
import random
import math
# 1 讀取維度信息
img = cv2.imread('face.jpg', 1)
cv2.imshow('src', img)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
cv2.imshow('shape', imgInfo)
# 2 讀取灰度圖片
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 3 求最大灰度段中的各通道值陷揪,并封裝
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)
# p1投影的灰度等級(jí)(共8個(gè))
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
# 求最大灰度段l
currentMax = array1[0]
l = 0
for k in range(0, 8):
if currentMax < array1[k]:
currentMax = array1[k]
l = k # 處于k灰度段
# 簡(jiǎn)化求l灰度段中各通道值 均值(或取均值)
for m in range(-4, 4):
for n in range(-4, 4):
# 灰度等級(jí):32 灰度段:l 處于l灰度段中
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]
# 4 顏色封裝
dst[i, j] = (b, g, r)
# 5 顯示油畫(huà)效果圖
# 較大的圖片處理時(shí)間較長(zhǎng)
cv2.imshow('dst', dst)
cv2.waitKey(0)
油畫(huà)效果如下: