常见的色彩空间:RGB,HSV,HIS,YCrCb,YUV
代码层面的知识点:
1·色彩空间转换API
2·学会使用inRange
3·通道分离与合并
本小节前部分比较简单,直接上代码(第一点,色彩空间转换实现):
import cv2 as cv
def color_space(image):
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_BGR2YUV)
cv.imshow("Ycrcb",Ycrcb)
src = cv.imread("C:/Users/idmin/Desktop/img/img1.jpg")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
color_space(src)
cv.imshow("input image", src)
cv.waitKey(0)
cv.destroyAllWindows() # 关闭所有窗口
效果图:
RGB到HSV表(很重要):
以下代码实现了特定颜色的视频抓取:
def mp4_demo():
capture = cv.VideoCapture("C:/Users/idmin/Desktop/img/mp41.MP4")
while(True):
ret,frame = capture.read()
# 判断是否读取正确,读取失败(比如视屏结束)则会终止循环,所以ret是个判断读取是否正确的返回量
if ret == False:
break;
hsv = cv.cvtColor(frame,cv.COLOR_BGR2HSV)
lower_hsv = np.array([100,43,46])
# 设置HSV范围下限(是长度为3的1D数组,三个元素分别表示H,S,V的下限)
upper_hsv = np.array([124,255,255])
# 设置HSV范围上限(是长度为3的1D数组,三个元素分别表示H,S,V的上限)
mask = cv.inRange(hsv,lowerb = lower_hsv,upperb=upper_hsv)
# hsv处于该范围内的就是广义的蓝色,颜色与HSV值得对应见上表
cv.imshow("video",frame)
cv.imshow("mask",mask)
c = cv.waitKey(50)
if c ==27:
break
效果图:
通道分离与合并:
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]) #通道合并
src[:,:,2] = 0