CV提取图片中指定颜色的部分
如何提取下方图片的红蓝绿三种颜色?
1、首先导入库
import cv2
import numpy as np
2、读取图片
BGR和HSV的转换使用 cv2.COLOR_BGR2HSV
img = cv2.imread("3.png")
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#HSV空间
(HSV空间中,H表示色彩/色度,取值范围 [0,179],S表示饱和度,取值范围 [0,255],V表示亮度,取值范围 [0,255]。)
3、分别设置三种颜色的阈值,并提取
cv2.inRange(src, lowerb, upperb[, dst]) → dst
src – first input array. 输入矩阵(图像)
lowerb – inclusive lower boundary array or a scalar.阈值下限
upperb – inclusive upper boundary array or a scalar.阈值上限
dst – output array of the same size as src and CV_8U type.输出和src相同的矩阵
lower_blue=np.array([110,100,100])#blue
upper_blue=np.array([130,255,255])
lower_green=np.array([60,100,100])#green
upper_green=np.array([70,255,255])
lower_red=np.array([0,100,100])#red
upper_red=np.array([10,255,255])
red_mask=cv2.inRange(hsv,lower_red,upper_red)#取红色
blue_mask=cv2.inRange(hsv,lower_blue,upper_blue)#蓝色
green_mask=cv2.inRange(hsv,lower_green,upper_green)#绿色
4、对原图像进行处理
red=cv2.bitwise_and(img,img,mask=red_mask)#对原图像处理
green=cv2.bitwise_and(img,img,mask=green_mask)
blue=cv2.bitwise_and(img,img,mask=blue_mask)
res=green+red+blue
cv2.bitwise_and()函数是对二进制数据进行“与”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“与”操作,1&1=1,1&0=0,0&1=0,0&0=0。
5、输出显示
cv2.imshow('img',res)
cv2.waitKey(0)
cv2.destroyAllWindows()
6、结果展示
全部代码已打包
import cv2
import numpy as np
img = cv2.imread("3.png")
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#HSV空间
lower_blue=np.array([110,100,100])#blue
upper_blue=np.array([130,255,255])
lower_green=np.array([60,100,100])#green
upper_green=np.array([70,255,255])
lower_red=np.array([0,100,100])#red
upper_red=np.array([10,255,255])
red_mask=cv2.inRange(hsv,lower_red,upper_red)#取红色
blue_mask=cv2.inRange(hsv,lower_blue,upper_blue)#蓝色
green_mask=cv2.inRange(hsv,lower_green,upper_green)#绿色
red=cv2.bitwise_and(img,img,mask=red_mask)#对原图像处理
green=cv2.bitwise_and(img,img,mask=green_mask)
blue=cv2.bitwise_and(img,img,mask=blue_mask)
res=green+red+blue
cv2.imshow('img',res)
cv2.waitKey(0)
cv2.destroyAllWindows()