Python-OpenCV颜色空间转换

目标
1. 对图像进行颜色空间转换,如从BGR到灰度图,或者从BGR到HSV等。
2. 创建程序从一副图像中获取某个特定颜色的物体。

0x01. 转换颜色空间

常用操作:BGR<->Gray和BGR<->HSV。
OpenCV中提供了cv2.cvtColor(input_image,flag),其中flag为转换类型。
BGR<->Gray :cv2.COLOR_BGR2GRAY
BGR<->HSV:cv2.COLOR_BGR2HSV
例子:

import cv2
import numpy as np

img=cv2.imread('test.jpg',cv2.IMREAD_COLOR)
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

cv2.imshow("img",img)
cv2.imshow("hsv",hsv)
cv2.waitKey(0)
cv2.destroyAllWindows()

注意:在OpenCV的HSV格式中,H(色彩/色度)的取值范围是[0,179],S(饱和度)的取值范围[0,255],V(亮度)的取值范围[0,255]。但是不同的软件使用值可能不同,所以在拿OpenCV的HSV值与其他软件的HSV值进行对比时,一定要归一化。

0x02. 物体跟踪

在HSV颜色空间中比在BGR空间中更容易表示某一个特定颜色。在下面程序中,提取了是图像中所有绿色的物体,一般要经过几步:

  • 将图像转换到HSV空间
  • 设置HSV阈值到绿色范围
  • 获取绿色物体

    实例:

     import cv2
     import numpy as np
    
    img=cv2.imread('test.jpg',cv2.IMREAD_COLOR)
    hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
    
    lower_green=np.array([35,43,46])
    upper_green=np.array([77,255,255])
    
    mask=cv2.inRange(hsv,lower_green,upper_green)
    res=cv2.bitwise_and(img,img,mask=mask)
    
    cv2.imshow("img",img)
    cv2.imshow("hsv",res)
    cv2.waitKey(0)
    cv2.destoryAllWindows()
    

你可能感兴趣的:(图像处理阅读)