opencv-python 色彩空间

常见的色彩空间: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

效果图:

发布了42 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_39395805/article/details/99972745