图片的色彩空间转换简单色彩跟踪与通道分离合并

Posted angle6-liu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图片的色彩空间转换简单色彩跟踪与通道分离合并相关的知识,希望对你有一定的参考价值。

一 图片的色彩空间转换

  • 灰度色彩空间

  单通道,取值范围[0,255] 0黑255白

  • RGB色彩空间(opencv中习惯用BGR)

  opencv中R,G,B三通道取值范围均为[0,255]。

 技术图片

  • HSV/HSL色彩空间

     H:0-180  S: 0-255 V: 0-255

  HSV是一种将RGB色彩空间中的点在倒圆锥体中的表示方法。HSV即色相(Hue)、饱和度(Saturation)、明度(Value),又称HSB(B即Brightness)。色相是色彩的基本属性,就是平常说的颜色的名称,如红色、黄色等。饱和度(S)是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值。明度(V),取0-max(计算机中HSV取值范围和存储的长度有关)。HSV颜色空间可以用一个圆锥空间模型来描述。圆锥的顶点处,V=0,H和S无定义,代表黑色。圆锥的顶面中心处V=max,S=0,H无定义,代表白色。
技术图片

 

1 代码

import cv2 as cv

#色彩空间的转换
def color_space_demo(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(hsv,yuv)

src=cv.imread(./yiner.jpg)
cv.namedWindow(before,cv.WINDOW_NORMAL)
cv.imshow(before,src)

color_space_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

 

 

技术图片

 

二:色彩空间转换,利用inrange函数过滤视频中的颜色,实现跟踪某一颜色

代码

#色彩空间转换,利用inrange函数过滤视频中的颜色,实现跟踪颜色
import cv2 as cv
import numpy as np

def catch_pen():
    capture=cv.VideoCapture(./1.mp4)#导入文件

    while True:
        ret,frame=capture.read()
        if ret==False:
            break
        #色彩空间转换到HSV
        hsv=cv.cvtColor(frame,cv.COLOR_BGR2HSV)
        # 设置黑色的范围,跟踪视频中的黑色
        lower_hsv=np.array([0,0,0]) #设置过滤的颜色的低值
        upper_hsv=np.array([180,255,46])#设置过滤的颜色的高值
        # 调节图像颜色信息(H)、饱和度(S)、亮度(V)区间,选择黑色区域
        mask=cv.inRange(hsv,lower_hsv,upper_hsv)
        cv.imshow(video,frame)
        cv.imshow(mask,mask)
        if cv.waitKey(50)&0xFF==ord(q):
            break

catch_pen()
cv.waitKey()
cv.destroyAllWindows()

 

HSV  lower_hsv和uppe_hsv查询表

技术图片

 

三 通道分离、合并,修改某一通道

通道分离:split() 将彩色图像分割为3个通道

合并:merge()

import cv2 as cv
import numpy as np

src=cv.imread(hua.jpg)
cv.namedWindow(before,cv.WINDOW_NORMAL)
cv.imshow(before,src)

#通道分离
b,g,r=cv.split(src)
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,src)

cv.waitKey(0)
cv.destroyAllWindows()

 

效果展示

技术图片

以上是关于图片的色彩空间转换简单色彩跟踪与通道分离合并的主要内容,如果未能解决你的问题,请参考以下文章

Opencv图像色彩空间与通道

Opencv 图像处理:图像通道直方图与色彩空间

图像色彩空间转换

opencv converTO()函数 转换图像的数据类型不改变通道数,注意与cvtColor()改变颜色空间/彩色空间/色彩空间函数区分

C/C++ vs2017 OpenCV简单入门

C/C++ vs2017 OpenCV简单入门