Day3 如何提取色彩
制作掩膜
色彩在图片中可视为一种具有特定特征的元素,利用RGB的值或者HSV可以识别,提取特定颜色,根据上一次的add我们已经知道抠图其实就是1掩膜的制作与相加,所以我们对于色彩的提取也可以先制作关于色彩的掩膜,然后再进行与预算,就可以只保留该颜色,甚至可以替换特定色彩。
img1 = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower = np.array([30, 150, 50])
upper = np.array([255, 255, 180])
img2 = cv2.inRange(img1, lower, upper)
img3 = cv2.bitwise_and(img, img, mask=img2)
这里利用cv.inRange函数的功能,将hsv图像中在指定范围外的部分全部清零,范围内的全部都变为白色。
再与原图进行与运算,下面是完整代码:
import cv2
import numpy as np
img = cv2.imread('C:\\Users\\1\\PycharmProjects\\text\\2\\Collage_20210913_135916.jpg')
img1 = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower = np.array([30, 150, 50])
upper = np.array([255, 255, 180])
img2 = cv2.inRange(img1, lower, upper)
img3 = cv2.bitwise_and(img, img, mask=img2)
cv2.namedWindow('image1')
cv2.namedWindow('image2')
cv2.imshow('image1', img2)
cv2.imshow('image2', img3)
cv2.waitKey(0)
cv2.destroyAllWindows()
尝试替换颜色
本来我是这么想的:既然可以提取出特定颜色,就可以在提取出来后进行颜色的替换。但问题在于替换后如何与原图像交互,更大的问题是,提取出的只是包含0和1的一个检测器,准确来说其实和原图像的色彩数据并无太大关系,只是能起到一个特征筛选的作用,所以其实这种方法的作用应该是比较有限的。
当然这只是我自己的想法,可能其实是办得到的,但我实在不会了。