小言_互联网的博客

在OpenCV里颜色空间的转换

541人阅读  评论(0)

颜色空间(Colorspace)也称彩色模型(又称彩色空间或彩色系统)它的用途是在某些标准下用通常可接受的方式对彩色加以说明。颜色空间从提出到现在已经有上百种,大部分只是局部的改变或专用于某一领域。科学研究中有不少逻辑性等方面比HSХ更高的颜色空间。用下面的代码,就可以获得当前OpenCV支持的所有颜色空间:

>>> import cv2 as cv

>>> flags = [i for i in dir(cv) if i.startswith('COLOR_')]

>>> print( flags )

目前在我的版本里支持为:

>>> len(flags)

274

因此可知共274种颜色空间。

颜色空间有许多种,常用有RGB,CMY,HSV,HSI等。

RGB(红绿蓝)是依据人眼识别的颜色定义出的空间,可表示大部分颜色。但在科学研究一般不采用RGB颜色空间,因为它的细节难以进行数字化的调整。它将色调,亮度,饱和度三个量放在一起表示,很难分开。它是最通用的面向硬件的彩色模型。该模型用于彩色监视器和一大类彩色视频摄像。

CMY是工业印刷采用的颜色空间。它与RGB对应。简单的类比RGB来源于是物体发光,而CMY是依据反射光得到的。具体应用如打印机:一般采用四色墨盒,即CMY加黑色墨盒。

HSV,HSI两个颜色空间都是为了更好的数字化处理颜色而提出来的。有许多种HSX颜色空间,其中的X可能是V,也可能是I,依据具体使用而X含义不同。H是色调,S是饱和度,I是强度。

L*a*b颜色空间用于计算机色调调整和彩色校正。它独立于设备的彩色模型实现。这一方法用来把设备映射到模型及模型本社的彩色分布质量变化。

 

在图像里基本的颜色空间变换BGR-Gray,BGR-HSV,可以使用函数cv.cvtColor(input_image, flag)来实现,cv.COLOR_BGR2GRAY标志实现了从彩色到灰度空间的变换,cv.COLOR_BGR2HSV标志实现了从彩色到HSV空间的变换。HSV空间里, H的范围是[0,179], S的范围[0,255]和V的范围是[0,255]。

0<=h<20,    红色  

30<=h<45,  黄色  

45<=h<90,   绿色  

90<=h<125,  青色 

125<=h<150, 蓝色  

150<=h<175, 紫色  

175<=h<200, 粉红色

200<=h<220, 砖红色

220<=h<255, 品红色

可以用下面的例来识别颜色:

#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#
import numpy as np
import cv2
from matplotlib import pyplot as plt

#定义HSV颜色范围:绿色
lower = np.array([45,50,50])
upper = np.array([90,255,255])
#打开摄像头
cap = cv2.VideoCapture(0)

while(1):

    # 读取一帧数据
    _, frame = cap.read()

    # 转BGR到HSV
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    #把HSV图像截取
    mask = cv2.inRange(hsv, lower, upper)

    # Bitwise-AND mask和原来图像
    res = cv2.bitwise_and(frame,frame, mask= mask)

    cv2.imshow('frame',frame) #显示原图
    cv2.imshow('mask',mask) #掩膜
    cv2.imshow('res',res) #只剩下蓝色
    
    if cv2.waitKey(5) & 0xFF == 27:
        break
cap.release()

#cv2.waitKey(0)
cv2.destroyAllWindows()

结果输出如下:

摄像头的图片

识别处理后的图片

https://blog.csdn.net/caimouse/article/details/51749579


转载:https://blog.csdn.net/caimouse/article/details/102532959
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场