颜色空间(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