该系列文章为 的学习笔记
代码托管在 转载请注明: [三记的博客]颜色空间转换
- RGB就是指Red,Green和Blue,一副图像由这三个channel(通道)构成
- Gray就是只有灰度值一个channel
- HSV即Hue(色调),Saturation(饱和度)和Value(亮度)三个channel
RGB是为了让机器更好的显示图像,对于人类来说并不直观,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:本文所有代码均在