zoukankan      html  css  js  c++  java
  • 色彩空间的转换

        1、   今天我们来学习一下色彩空间转换,那么什么是色彩空间呢(可以看百度上的解释:https://baike.baidu.com/item/%E8%89%B2%E5%BD%A9%E7%A9%BA%E9%97%B4/4615427?fr=aladdin)

       我们常见色彩空间有: RGB    HSV    HIS  Ycrcb   YUV

     1 import cv2 as cv
     2 import numpy as np
     3 
     4 
     5 def color_space(image):
     6     gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY) #色彩转为GRAY
     7     cv.imshow("gray",gray)
     8     HSV=cv.cvtColor(image,cv.COLOR_BGR2HSV) # 色彩转为HSV
     9     cv.imshow('hsv',HSV)
    10     YUV=cv.cvtColor(image,cv.COLOR_BGR2YUV) #色彩转为YUV
    11     cv.imshow('yuv',YUV)
    12 
    13 src = cv.imread('D:/hh.JPG')
    14 cv.namedWindow("ago",cv.WINDOW_AUTOSIZE)
    15 cv.imshow("ago", src)
    16 color_space(src)
    17 cv.waitKey(-1)
    18 cv.destoryAllWindows()

        实现效果如下:

        

         HSV色彩通道说明:

              H:0--180

             S: 0--255

             V: 0---255

       2、利用inRange()实现过滤掉视频中的颜色,实现只对某一颜色追踪,在之前我们来看一下HSV颜色对应RGB的分量范围;

              

            

     1 import cv2 as cv
     2 import numpy as np
     3 
     4 
     5 def capture_video():
     6     capture = cv.VideoCapture('D:/tt.avi')
     7     while True:
     8         ret ,frame=capture.read()
     9         if not ret:
    10             break
    11         HSV=cv.cvtColor(frame,cv.COLOR_BGR2HSV) #把色彩空间转为HSV
    12         lower_hsv=np.array([37,43,461]) #设置颜色的最低值,这里是根据上面那张HSV颜色以RGB为分量的颜色范围,这里使用numpy 的矩阵运算功能
    13         upper_hsv=np.array([77,255,255]) #设置颜色的最高值,也是根据那张表选择的
    14         mask=cv.inRange(HSV,lower_hsv,upper_hsv)  #调节图像颜色信息(H) 、饱和度(S)、亮度(V)区间,选择白色区域
    15         cv.imshow('video',frame)
    16         cv.imshow('mask',mask)
    17         c = cv.waitKey(50)
    18         if c == 27 :
    19             break
    20 t1=cv.getTickCount()
    21 
    22 capture_video()
    23 
    24 t2=cv.getTickCount()
    25 
    26 print('the time is : %s ms'%((t2-t1)/cv.getTickFrequency()*1000))
    27 
    28 cv.waitKey(-1)
    29 cv.destoryAllWindows()

       实现效果如下(我这里选择的视频不好,没有白色区域,全是黑色的,hh):

        

       3、通道的分离与合并: 

            首先是通道的分离:

    30 import cv2 as cv
    31 import numpy as np
    32 
    33 src=cv.imread('D:/hh.JPG')
    34 cv.namedWindow('ago',0)
    35 cv.imshow('ago',src)
    36 #进行通道分离,输出三个单通道图片
    37 b,g,r=cv.split(src) #利用函数split()将色彩图像分割成3个通道
    38 cv.imshow('blue',b)
    39 cv.imshow('green',g)
    40 cv.imshow('red',r)
    41 
    42 
    43 
    44 cv.waitKey(-1)
    45 cv.destoryAllWindows()

    效果如下(我们可以看到通道分离成功,有三个通道,分别是:blue ,green,red):

             

            接下来是通道的合并:

          

     1 import cv2 as cv
     2 import numpy as np
     3 
     4 src=cv.imread('D:/hh.JPG')
     5 cv.namedWindow('ago',0)
     6 cv.imshow('ago',src)
     7 #进行通道分离,输出三个单通道图片
     8 b,g,r=cv.split(src) #利用函数split()将色彩图像分割成3个通道
     9 cv.imshow('blue',b)
    10 cv.imshow('green',g)
    11 cv.imshow('red',r)
    12 
    13 #进行通道的合并
    14 src=cv.merge([b,g,r])# 利用函数merge()实现通道的合并
    15 cv.imshow('together',src)
    16 
    17 
    18 cv.waitKey(-1)
    19 cv.destoryAllWindows()

        效果如下:

        

          最后实现单个通道颜色值得修改:

         

     1 import cv2 as cv
     2 import numpy as np
     3 
     4 src=cv.imread('D:/hh.JPG')
     5 cv.namedWindow('ago',0)
     6 cv.imshow('ago',src)
     7 #进行通道分离,输出三个单通道图片
     8 b,g,r=cv.split(src) #利用函数split()将色彩图像分割成3个通道
     9 cv.imshow('blue',b)
    10 cv.imshow('green',g)
    11 cv.imshow('red',r)
    12 
    13 #进行通道的合并
    14 src=cv.merge([b,g,r])# 利用函数merge()实现通道的合并
    15 cv.imshow('together',src)
    16 
    17 #是可以实现修改某个通道的值
    18 src[:,:,2]=100 #这里是修改了第三个通道的值,也就是red 这通道
    19 cv.imshow('alone',src)
    20 
    21 cv.waitKey(-1)
    22 cv.destoryAllWindows()

        总结:今天学到的知识点就写到这里了,收获很大,继续加油,坚持下去,看到不一样的自己。

  • 相关阅读:
    [转]利用docker进行java开发小demo
    markdown简介及语法
    Thinking in Java 之classpath理解
    docker官方windows安装
    Thinking in Java笔记之类及对象的初始化
    开发工具之play framework
    图解phpstorm常用快捷键
    Git相关
    Yii 1.1 cookie删不掉
    ajax跨域,这应该是最全的解决方案了
  • 原文地址:https://www.cnblogs.com/1121518wo/p/10806782.html
Copyright © 2011-2022 走看看