原始图像
![avatar]()
首先使用 cv2.inRange()
选取叶子
然后对原图的 bgr
三个数组进行修改
RGB对照表
颜色名称 |
红色值Red |
绿色值Green |
蓝色值Blue |
黑色 |
0 |
0 |
0 |
蓝色 |
0 |
0 |
255 |
绿色 |
0 |
255 |
0 |
青色 |
0 |
255 |
255 |
红色 |
255 |
0 |
0 |
洋红色 |
255 |
0 |
255 |
黄色 |
255 |
255 |
0 |
白色 |
255 |
255 |
255 |
HSV 对照表
![img]()
在PS上操作
类似于 Photoshop
的替换颜色功能。上面做的没 ps
的好看,因为只是简单处理了一下。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| import numpy as np import cv2
img_bgr = cv2.imread('avatar.png')
img_hsv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV)
lower_green = np.array([35, 80, 150]) upper_green = np.array([77, 255, 255]) leaf = cv2.inRange(img_hsv, lower_green, upper_green)
img_y_range = leaf.shape[0] img_x_range = leaf.shape[1]
for i in range(0, img_y_range - 20): for j in range(0, img_x_range): if leaf[i][j] == 255: b_temp = img_bgr[i][j][0] g_temp = 255 - img_bgr[i][j][1] r_temp = img_bgr[i][j][2] img_bgr[i][j][0] = (50 + (b_temp % 10) * 3) img_bgr[i][j][1] = (0 + (g_temp % 10) * 3) img_bgr[i][j][2] = (210 + (r_temp % 10) * 3)
cv2.imshow('leaf', leaf) cv2.imshow('new_avatar', img_bgr)
cv2.waitKey(0) cv2.destroyAllWindows()
|