利用图像色彩空间转换,进行扣图。
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的取值表。