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)
效果图如下,可以明显看到区别: