转换颜色空间
# -*- coding: utf-8 -*-
import cv2
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #RGB转换为GRAY
#这里的生成的gray图是单通道的
cv2.imshow("gray", gray)
hsv = cv2.cvtColor(img, cv.COLOR_BGR2HSV) #RGB转换为HSV
cv2.imshow("hsv", hsv)
cv2.namedWindow('first_image', cv.WINDOW_AUTOSIZE)
cv.imshow('first_image', src)
cv2.waitKey(10000)
cv2.destroyAllWindows()
1.RGB就是指Red,Green和Blue,一副图像由这三个channel(通道)构成
2.Gray就是只有灰度值一个channel。
3.HSV即Hue(色调),Saturation(饱和度)和Value(亮度)三个channel
什么是HSV色彩空间
在OpenCV的HSV格式中,H(色彩/色度)的取值范围是 [0, 179],S(饱和度)的取值范围 [0, 255], V(亮度)的取值范围 [0, 255]。但是不同的软件使用的值可能不同。所以当你需要拿OpenCV 的 HSV 值与其他软件的HSV 值进行对比时,一定要记得归一化。

现在我们知道怎样将一幅图像从 BGR 转换到 HSV 了,我们可以利用这一点来提取带有某个特定颜色的物体。在HSV 颜色空间中要比在 BGR 空间中更容易表示一个特定颜色。在我们的程序中,我们要提取的是一个蓝色的物体。
代码如下:
# -*- coding: utf-8 -*-
import cv2
import numpy as np
cap=cv2.VideoCapture(0)
while(1):
# 获取每一帧
ret,frame=cap.read()
# 转换到 HSV
hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
# 设定蓝色的阈值
lower_blue=np.array([110,50,50])
upper_blue=np.array([130,255,255])
# 根据阈值构建掩模
mask=cv2.inRange(hsv,lower_blue,upper_blue)
# 显示图像
cv2.imshow('frame',frame)
cv2.imshow('mask',mask)
k=cv2.waitKey(5)&0xFF
if k==27:
break
# 关闭窗口
cv2.destroyAllWindows()
运行结果:

注意:
(1)cv2.inRange函数参数有三个
第一个参数:hsv指的是原图
第二个参数:lower_blue指的是图像中低于这个lower_blue的值,图像值变为0
第三个参数:upper_blue指的是图像中高于这个upper_blue的值,图像值变为0
(2)hsv基本颜色分量表

网友评论