由于RGB通道并不能很好地反映出物体具体的颜色信息,而相对于RGB空间,HSV空间能够非常直观的表达色彩的明暗,色调,以及鲜艳程度,方便进行颜色之间的对比。所以我们经常使用色彩空间转换。
下面展示 代码
。
import cv2 as cv
import numpy as np
# 色彩空间的转换
def color_space_demo(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) # RGB转换为gray
cv.imshow("gray", gray)
hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV) # RGB转换为hsv
cv.imshow("hsv", hsv)
yuv = cv.cvtColor(image, cv.COLOR_BGR2YUV) # RGB转换为yuv
cv.imshow("yuv", yuv)
# 提取目标特征
def estract_object_demo():
capture = cv.VideoCapture("pic/1.mp4")#导入视频
while True:
ret, frame = capture.read() #ret返回true和false 如果返回的frame帧有值,则ret返回ture
if ret == False:
break
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)#转换色彩空间为hsv
#设置绿色的范围,跟踪视频中的绿色
lower_hsv = np.array([35, 43, 46])#设置过滤的颜色的低值
upper_hsv = np.array([77, 255, 255])#设置过滤的颜色的高值
# 经过滤之后得到的mask是二值图像
mask = cv.inRange(hsv, lower_hsv, upper_hsv)#调节图像颜色信息(H)、饱和度(S)、亮度(V)区间,选择白色区域
cv.imshow("video", frame)
cv.imshow("mask", mask)
if cv.waitKey(50) & 0xFF == ord('q'):
break
if __name__ == '__main__':
'''
调用color_space_demo()函数 色彩空间转换
'''
# src = cv.imread("pic/cat.jpg")# 读取到的是RGB图像
# cv.namedWindow("original", cv.WINDOW_NORMAL)
# cv.imshow("original", src)
# color_space_demo(src)
# cv.waitKey(0)
# cv.destroyAllWindows()
'''
调用estract_object_demo()函数 提取目标特征
'''
# estract_object_demo()
# cv.waitKey(0)
# cv.destroyAllWindows()
'''
通道分离、合并及修改
'''
src = cv.imread("pic/cat.jpg")
cv.namedWindow("original", cv.WINDOW_NORMAL)
cv.imshow("original", src)
# 通道分离,输出三个单通道图片
b, g, r = cv.split(src) # 将彩色图像分割成3个通道
cv.imshow("blue", b)
cv.imshow("green", g)
cv.imshow("red", r)
# 通道合并
src = cv.merge([b, g, r])
cv.imshow("merge", src)
# 修改某个通道的值
src[:, :, 2] = 100
cv.imshow("single_channel", src)
cv.waitKey(0)
cv.destroyAllWindows()