基于python的OpenCV学习——色彩空间

OpenCV中有数百种关于在不同色彩空间之间的转换的方法。当前,计算机视觉中有三种常用的色彩空间:灰度、BGR以及HSV(Hue,Saturation,Value)。



  1. 灰度色彩空间是通过去除彩色信息来将其转换成灰阶,灰度色彩空间对中间处理特别有效,比如人脸检测。
  2. BGR,即蓝-绿-红色彩空间,每一个像素点都由一个三元数组来表示,分别代表蓝、绿、红三种颜色。另一个与之相似的颜色空间:RGB,它们只是在颜色的顺序上不同。
  3. HSV, H(Hue)是色调,S(Saturation)是饱和度,V(Value)表示黑暗的程度(或光谱的另一端的明亮程度)

下面看一下OpenCV色彩空间代码实现以及展示的效果图:


   
   
  1. #!/usr/bin/env python
  2. # _*_ coding:utf-8 _*_
  3. import cv2 as cv
  4. def color_space(image):
  5. gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) #灰度图
  6. cv.imshow( "gray", gray)
  7. hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV) #HSV
  8. cv.imshow( "hsv", hsv)
  9. yuv = cv.cvtColor(image, cv.COLOR_BGR2YUV) #YUV
  10. cv.imshow( "yuv", yuv)
  11. ycrcb = cv.cvtColor(image, cv.COLOR_BGR2YCrCb) #YCrCb
  12. cv.imshow( "ycrcb", ycrcb)
  13. img = cv.imread( "F:\\flower.jpg")
  14. cv.namedWindow( "image window", cv.WINDOW_AUTOSIZE)
  15. cv.imshow( "image window", img)
  16. color_space(img)
  17. cv.waitKey( 0)
  18. cv.destroyAllWindows()

原图:


灰度图:


HSV效果图:


YUV效果图:


YCrCb效果图:



接下来我们介绍色彩空间方面从视频文件中过滤某种颜色。

颜色范围表



   
   
  1. #!/usr/bin/env python
  2. # _*_ coding:utf-8 _*_
  3. import cv2 as cv
  4. import numpy as np
  5. def extract_obj():
  6. capture = cv.VideoCapture( "D:\\02Jumping.wmv") #读取视频文件
  7. while( True): #判断是否读取成功
  8. ret, frame = capture.read()
  9. if ret == False:
  10. break
  11. #把视频中的某种颜色过滤出来
  12. hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV) # 转换成HSV色彩空间
  13. lower_hsv = np.array([ 0, 43, 46]) # 色彩低值(红色)
  14. upper_hsv = np.array([ 180, 255, 255]) # 色彩高值
  15. # lower_hsv = np.array([35, 43, 46]) # 色彩低值(绿色)
  16. # upper_hsv = np.array([77, 255, 255]) # 色彩高值
  17. mask =cv.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv) #inRange之后得到的是二值图像
  18. cv.imshow( "video", frame) #显示视频文件
  19. cv.imshow( "mask", mask)
  20. c = cv.waitKey( 30)
  21. if c == 27:
  22. break
  23. extract_obj()
  24. cv.waitKey( 0)
  25. cv.destroyAllWindows()

运行显示的视频效果如下图:左边是原视频,右边是处理红色色彩空间之后的视频效果



最后介绍通道的分离与合并部分。


   
   
  1. #!/usr/bin/env python
  2. # _*_ coding:utf-8 _*_
  3. import cv2 as cv
  4. import numpy as np
  5. #通道的分离
  6. img = cv.imread( "F:\\flower.jpg")
  7. cv.namedWindow( "image window", cv.WINDOW_AUTOSIZE)
  8. cv.imshow( "image window", img)
  9. b, g, r = cv.split(img)
  10. cv.imshow( "blue", b)
  11. cv.imshow( "green", g)
  12. cv.imshow( "red", r)
  13. #通道的合并
  14. src = cv.merge([b, g, r])
  15. src[:, :, 0] = 0
  16. cv.imshow( "merger image", img)
  17. cv.waitKey( 0)
  18. cv.destroyAllWindows()

运行效果如下:


合并图与原图是不是一样呢?



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值