一、彩色空间
1、YCbCr彩色空间
Y:亮度信息
Cb:彩色信息,蓝色分量
Cr:彩色信息,红色分量
注:BGR2YCrCb:把BGR图像转换为YCbCr图像,公式如下
2、HSV彩色空间
H:色调,也称色泽
S:饱和度,也称明暗
V:数值,也称调色
HSV基于柱坐标表系。色调是围绕彩色六边形描述,轴代表所有灰度级,饱和度即为到轴的距离。
二、hsv常用色彩转换值表
三、代码
import cv2 as cv
import numpy as np
# 提取有颜色的对象进行二值化转换
def extrace_object_demo():
capture = cv.VideoCapture('D:/OpenCV/opencv-python/20220305_11.mp4')
while True:
ret, frame = capture.read()
if not ret:
break
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
lower_hsv = np.array([0, 0, 221])
upper_hsv = np.array([180, 30, 255])
"""
inRange(src, lowerb, upperb, dst=None)
作用:得到二值化图像,将在两个阈值内的像素值设置为白色(255),而不在阈值区间内的像素值设置为黑色(0)
src:输入要处理的图像,可以为单通道或多通道。
lowerb:包含下边界的数组或标量。
upperb:包含上边界数组或标量。
dst:输出图像,与输入图像src 尺寸相同且为CV_8U 类型,输出一幅二值化之后的图像
"""
mask = cv.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv)
# mask:图像掩膜,可选参数,为8位单通道的灰度图像,指定要更改的输出图像数组的元素,即输出图像像素只有mask对应位置元素不为0的部分才输出。
dst = cv.bitwise_and(frame, frame, mask=mask)
cv.imshow('video', frame)
cv.imshow('mask', dst)
# ’10‘越小播放越快
c = cv.waitKey(10)
if c == 27:
break
# 色彩转换
def color_space_demo(image):
"""
:param image: cvtColor(Mat src, Mat dst, int code)---将彩色图像转换为灰度图像或其他图像
src - 表示来源的矩阵。
dst - 表示目的地的矩阵。
code - 表示转换类型的整数代码,例如RGB到灰度。
:return:
"""
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
cv.imshow('gray', gray)
hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)
cv.imshow('hsv', hsv)
yuv = cv.cvtColor(image, cv.COLOR_BGR2YUV)
cv.imshow('yuv', yuv)
ycrcb = cv.cvtColor(image, cv.COLOR_BGR2YCrCb)
cv.imshow('ycrcb', ycrcb)
print("-------Hello Python-------")
src = cv.imread('D:/OpenCV/opencv-python/xiexie.png')
cv.namedWindow('input image', cv.WINDOW_AUTOSIZE)
cv.imshow('input image', src)
# color_space_demo(src)
extrace_object_demo()
# 通道分离
b, g, r = cv.split(src)
cv.imshow('blue', b)
cv.imshow('green', g)
cv.imshow('red', r)
# 针对某一通道赋值,
src[:, :, 2] = 0
# 通道合并
src = cv.merge([b, g, r])
cv.imshow('changed image', src)
cv.waitKey(0)
cv.destroyAllWindows()