1.浮雕效果
浮雕效果:newP = gray0-gray1+150(特定值) 即当前像素等于相邻像素之差再加上一个特定值突出灰度 即边缘特征,设定不同的特征值的时候会出现不同的浮雕效果。
测试代码如下:
1 import cv2 2 import numpy as np 3 import random 4 img = cv2.imread(‘image0.jpg‘, 1) 5 imgInfo = img.shape 6 height = imgInfo[0] 7 width = imgInfo[1] 8 cv2.imshow(‘src‘,img) 9 # 转化为灰度图 10 gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 11 dst = np.zeros((height,width,1),np.uint8) 12 for i in range(0,height): 13 for j in range(0,width-1): 14 grayP0 = int(gray[i,j]) 15 grayP1 = int(gray[i,j+1]) 16 newP = grayP0-grayP1+50 17 if newP > 255: 18 newP = 255 19 if newP < 0: 20 newP = 0 21 dst[i,j] = newP 22 cv2.imshow(‘dst‘,dst) 23 cv2.waitKey(0)
运行结果如下:
src初始图像:
dst浮雕效果图像:(特定值为150的时候)
dst浮雕效果图像:(特定值为50的时候)
2.颜色映射
颜色映射按照我的理解就是一个颜色对应上另一个颜色,比如蓝色对应红色,那么一副纯蓝色的图像就会被映射为一副纯红色的图像。
颜色映射的实现方法:可以建立一张颜色映射表,另外一种简单的方法是对rgb分别乘上一个系数,以下面实现一个“蓝色效果”为例,b=b*1.5 g=g*1.3 r=r,测试代码如下:
1 import cv2 2 import numpy as np 3 import random 4 img = cv2.imread(‘image0.jpg‘, 1) 5 imgInfo = img.shape 6 height = imgInfo[0] 7 width = imgInfo[1] 8 cv2.imshow(‘src‘,img) 9 dst = np.zeros((height,width,3),np.uint8) 10 for i in range(0,height): 11 for j in range(0,width): 12 (b,g,r) = img[i,j] 13 b = b * 1.5 14 g = g * 1.3 15 # 防止越界操作 16 if b > 255: 17 b = 255 18 if g > 255: 19 g = 255 20 dst[i,j] = (b,g,r) 21 cv2.imshow(‘dst‘,dst) 22 cv2.waitKey(0)
运行结果如下:
src为初始图像:
dst为蓝色效果图像:
3.油画特效
油画特效
1 gray
2 统计方块中的灰度值
3 对灰度值进行分段
4 对灰度值取平均作为结果
测试代码如下:
1 import cv2 2 import numpy as np 3 import random 4 img = cv2.imread(‘Jerry.jpg‘, 1) 5 imgInfo = img.shape 6 height = imgInfo[0] 7 width = imgInfo[1] 8 cv2.imshow(‘src‘,img) 9 # 灰度化 10 gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 11 dst = np.zeros((height,width,3),np.uint8) 12 for i in range(4,height-4): 13 for j in range(4,width-4): 14 array1 = np.zeros(8,np.uint8) 15 for m in range(-4,4): 16 for n in range(-4,4): 17 p1 = int(gray[i+m,j+n]/32) 18 array1[p1] = array1[p1]+1 19 currentMax = array1[0] 20 l = 0 21 for k in range(0,8): 22 if currentMax < array1[k]: 23 currentMax = array1[k] 24 l=k 25 for m in range(-4,4): 26 for n in range(-4,4): 27 if gray[i+m,j+n] >= (l*32) and gray[i+m,j+n] <= ((l+1)*32): 28 (b,g,r) = img[i+m,j+n] 29 dst[i,j] = (b,g,r) 30 cv2.imshow(‘Jerry‘,dst) 31 cv2.waitKey(0)
运行结果如下:
src为原始图像:
Jerry是处理后的图像:
原文地址:https://www.cnblogs.com/shixinzei/p/10899102.html
时间: 2024-10-29 22:13:42