4.色彩空间的转换

学习视频可参见python+opencv3.3视频教学 基础入门

今天写的是色彩空间的转换

1.常见色彩空间及色彩空间转换

  • RGB
    • 红色:Red,绿色:Green,蓝色:Blue
  • HSV
    • 色相:Hue(0-180),饱和度:Saturation(0-255),明度;Value(0-255)
    • 常用于颜色检测
  • HSL/HLS
    • 色相:Hue、饱和度:Saturation、亮度:Lightness/Luminance
    • 色相H:用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°
  • YUV
    • YUV不是几个英文单词的组合词,而是符号,Y表示亮度,UV用来表示色差,U、V是构成彩色的两个分量
    • YUV 色彩模型来源于rgb模型,该模型的特点是将亮度和色度分离开,从而适合于图像处理领域。
  • YCrCb
    • Y:亮度分量,Cb:蓝色色度分量,Cr:红色色度分量
    • YCbCr模型来源于yuv模型,应用于数字视频
    • 常用于肤色检测
      色彩空间demo
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)

    hls=cv.cvtColor(image,cv.COLOR_BGR2HLS)
    cv.imshow("hls",hls)

    yuv = cv.cvtColor(image, cv.COLOR_BGR2YUV)
    cv.imshow("yuv", yuv)

    ycrcb = cv.cvtColor(image, cv.COLOR_BGR2YCrCb)
    cv.imshow("ycrcb", ycrcb)

运行结果如下:

image-20201104103355246

image-20201104105818872

image-20201104105836045

2.跟踪视频中指定颜色,inRange

HSV颜色分量范围
image-20201104105848575

inRange函数说明:

mask = cv2.inRange(hsv, lower, upper)
  • hsv:rgb图像转换为hsv格式的图像

  • lower:图像中低于这个lower的值,图像值变为0,即变为黑

  • upper:图像中高于这个upper的值,图像值变为0,即变为黑

  • 在lower~upper之间的值变成255,即变为白

    inRange用于实现图片的二值化

从视频中获取绿色分量代码如下:

# 可从视频中跟踪指定颜色,指定颜色置为白,其余置为黑
def extract_object_demo():
    capture=cv.VideoCapture("./images/vtest.avi")
    while(True):
        ret,frame=capture.read()
        if ret ==False:
            break
        hsv=cv.cvtColor(frame,cv.COLOR_BGR2HSV)
        lower_hsv = np.array([35, 43, 46])  # 对应的绿色的hsv中h,s,v的最小值
        upper_hsv = np.array([77, 255, 255])  #对应的绿色的hsv中的h,s,v最大值
        mask=cv.inRange(hsv,lowerb=lower_hsv,upperb=upper_hsv)
        cv.imshow("video",frame)
        cv.imshow("mask",mask)
        c=cv.waitKey(40)
        if c==27:
            break

结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aXmoXx33-1604485567619)(https://gitee.com/guohui7/weixinpicture/raw/master/img/%E6%98%BE%E7%A4%BA%E7%BB%BF%E8%89%B2%E8%BF%BD%E8%B8%AA.gif)]

若想获得红色,蓝色等的分量可以从表中选取对应值进行操作

如果结果想凸显绿色,可进行像素间的与运算得到,下节课提到了。

代码如下:

 mask=cv.inRange(hsv,lowerb=lower_hsv,upperb=upper_hsv)
 dst=cv.bitwise_and(frame,frame,mask=mask)
 cv.imshow("video",frame)
 cv.imshow("mask",mask)
 cv.imshow("dst",dst)

video与dst窗口的对比图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TISUGLjP-1604485567625)(https://gitee.com/guohui7/weixinpicture/raw/master/img/%E6%98%BE%E7%A4%BA%E7%BB%BF%E8%89%B2%E8%BF%BD%E8%B8%AA.gif)]

3.图像的分离与合并

3.1 分离

#显示各个通道的图像

    b,g,r=cv.split(src)
    cv.imshow("blue",b)
    cv.imshow("green",g)
    cv.imshow("red",r)

原图与各个通道的对比图如下:

image-20201003213608690

image-20201003213638015

将绿色,红色通道置为0,获得新图像。

    src[:,:,2]=0
    src[:,:,1]=0
    cv.imshow("new image",src)

结果如下:

image-20201003213723081

如果取原图和新图的蓝色通道慧发现是一样的,因为蓝色通道的值没有改变

3.2合并

将三通道分离出来的图片合并一起可以发现跟原图是一样的

    src=cv.merge([b,g,r])  #merge第一个参数mv是数组形式
    cv.imshow("change_image",src)

image-20201003222819314

结语

以上内容仅是自我学习时记录的笔记,欢迎大家批评指正,一起学习进步。欢迎大家关注我的公众号小郭学数据。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值