【opencv+python】图像处理之一、颜色空间RGB,Gray与HSV

该系列文章为 OpenCV+Python Tutorials的学习笔记
代码托管在Github
转载请注明: http://blog.csdn.net/a352611/article/details/51416769 [三记的博客]


颜色空间转换

cv2.cvtColor

  • RGB就是指Red,Green和Blue,一副图像由这三个channel(通道)构成
  • Gray就是只有灰度值一个channel
  • HSV即Hue(色调),Saturation(饱和度)和Value(亮度)三个channel

RGB是为了让机器更好的显示图像,对于人类来说并不直观,HSV更为贴近我们的认知,所以通常我们在针对某种颜色做提取时会转换到HSV颜色空间里面来处理.
HSV
需要注意的是H的取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°,想提取红色时需注意取值应为-10~10(打比方)OpenCV中H的取值范围为0~180(8bit存储时),


例子

提取蓝色物体

HSV = cv2.cvtColor(Img, cv2.COLOR_BGR2HSV)
H, S, V = cv2.split(HSV)
LowerBlue = np.array([100, 100, 50])
UpperBlue = np.array([130, 255, 255])
mask = cv2.inRange(HSV, LowerBlue, UpperBlue)
BlueThings = cv2.bitwise_and(Img, Img, mask=mask)

原图

蓝色物体

PS:

RGB在OpenCV中存储为BGR的顺序,数据结构为一个3D的numpy.array,索引的顺序是行,列,通道:

BGRImg = cv2.imread(ImgPath)
B = BGRImg[:, :, 0]
G = BGRImg[:, :, 1]
R = BGRImg[:, :, 2]

也可以使用:

BGRImg = cv2.imread(ImgPath)
B, G, R = cv2.split(BGRImg)

注意,cv2.split的速度比直接索引要慢,但cv2.split返回的是拷贝,直接索引返回的是引用(改变B就会改变BGRImg)

TIPS:本文所有代码均在/Src/ImageProcessing/ColorSpace/ColorSpaces.py

转载于:https://www.cnblogs.com/ThreeDayMemory/p/5958692.html

你可能感兴趣的:(【opencv+python】图像处理之一、颜色空间RGB,Gray与HSV)