利用图像色彩空间转换,进行扣图。
- import cv2
- import numpy
-
- #创建图像
- img=cv2.imread('jiuXinNai.jpg',cv2.IMREAD_REDUCED_COLOR_2)
-
- #扣图1,扣除黄色
- hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV) #色彩空间转换
- kou_part1=cv2.inRange(hsv,(26,43,46),(34,255,255)) #取出图像中黄色的部分,kou_part1表示黄色图像
- cv2.bitwise_not(kou_part1,kou_part1) #将kou_part1取反,就可以得到非黄色部分的一个图像
- img_kou1=cv2.bitwise_and(img,img,mask=kou_part1) #将原图像和非黄色部分图像进行逻辑与运算,就可以抠出没有黄色的图像
-
- #抠图2,将扣图1中的图像再抠除橙色
- kou_part2=cv2.inRange(hsv,(11,43,46),(25,255,255)) #取出图像中橙色的部分,kou_part2表示橙色图像
- cv2.bitwise_not(kou_part2,kou_part2) #将kou_part2取反,就可以得到非橙色部分的一个图像
- img_kou2=cv2.bitwise_and(img_kou1,img_kou1,mask=kou_part2) #将图像和非橙色部分图像进行逻辑与运算,就可以抠出没有橙色的图像
-
- #显示图像
- cv2.imshow('img',img)
-
- cv2.imshow('img_kou1',img_kou1)
- cv2.imshow('img_kou2',img_kou2)
-
-
- #保存图像
- cv2.imwrite("D:/img.jpg",img)
- cv2.imwrite("D:/img_kou1.jpg",img_kou1)
- cv2.imwrite("D:/img_kou2.jpg",img_kou2)
-
-
- cv2.waitKey(0)
- cv2.destroyAllWindows()
首先是从网上随便找来的一张动漫图片,主要目的是把玖辛奈从图片里面扣出来。

一眼看过去,动漫人物背景应该有三种背景颜色:黄色、橙色、白色,所以第一个先扣除黄色,得到下面的图像。

扣除了黄色之后,再扣除橙色,就可以得到下面的图像。
而上面就是最终的扣图效果了,而为什么不扣除白色呢?因为动漫人物身上也有白色,如果把白色消去的话,那动漫人物的脸和衣服上的白色也会被消去,就达不到扣图的效果了。
比如会出现这种情况

我已经扣除了白色部分了,但是好像还是没有清理干净, 另外一部分是什么颜色,我就不太清楚了。
最后是inRange的取值表。
