1 浮雕效果
浮雕效果和邊緣效果一樣,也是需要求梯度的過程
計算公式:newP = gray0 - gray1 + 150,即,灰度圖中,相鄰的兩個像素值之差加上150即爲新的像素值
代碼實現如下:
import cv2
import numpy as np
import math
img = cv2.imread('1.jpg', 1)
info = img.shape
cv2.imshow('src', img)
height = info[0]
width = info[1]
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
dst = np.zeros((height, width, 1), np.uint8)
for i in range(0, height):
for j in range(0, width-1):
grayP0 = int(gray[i, j])
grayP1 = int(gray[i, j+1])
newP = grayP0 - grayP1 + 150
# 防止越界
if newP > 255:
newP = 255
if newP < 0:
newP = 0
dst[i, j] = newP
cv2.imshow("dst", dst)
cv2.waitKey(0)
效果圖爲:
2 顏色映射
顏色映射有很多方法,也有的很複雜,這裏運用的顏色映射的公式和工作量稍小,可以借鑑:
b = b*1.5 g = g*1.3
源碼是:
import cv2
import numpy as np
import math
img = cv2.imread('1.jpg', 1)
info = img.shape
cv2.imshow('src', img)
height = info[0]
width = info[1]
dst = np.zeros((height, width, 3), np.uint8)
for i in range(0, height):
for j in range(0, width):
(b, g, r) = img[i, j]
b = b * 1.5
g = g * 1.3
# 防止越界
if b > 255:
b = 255
if g > 255:
g = 0
dst[i, j] = (b, g, r)
cv2.imshow("dst", dst)
cv2.waitKey(0)
效果圖如下,可以明顯看到區別: