opencv python
pycharm windows7
色调(Hue)、饱和度(Saturation)、亮度(Value)三个分量构成,H 表示色调 也有叫色相的 红绿蓝 这些。用度数表示红0度,绿120度,蓝240度。从红--蓝(或者红紫) ,opencv里 范围:0-180S 代表饱和度, 纯色占的比例,表达深浅度(0-100%) 比如深红 品红 0-255V 亮度 (0-100%) 0-255import cv2import numpy as npimage = cv2.imread('c:\\meiping1.png')先展示源图情况。
转化成HSV HSV = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)cv2.imshow('HSV', HSV)分离HSV通道 并显示H, S, V = cv2.split(HSV)cv2.imshow('H', H)cv2.imshow('S', S)cv2.imshow('V', V)print(H)print(S)print(V)HSV出来是这个效果还是有点没想到,
H 取值:[[ 80 80 70 ... 93 96 95] [ 84 70 80 ... 93 86 90] [ 83 84 80 ... 100 90 96] ... [ 80 90 84 ... 160 105 113] [ 80 95 90 ... 90 80 90] [ 80 120 120 ... 60 80 68]]这表示的是H通过到颜色数字,度数。图片把他们当灰度图显示了。其实这用该是表示H色调.
S: 表达颜色深浅程度[[ 4 4 4 ... 13 7 9] [ 7 4 4 ... 13 12 9] [ 5 7 8 ... 8 7 7] ... [ 5 10 17 ... 5 7 7] [10 10 12 ... 7 11 4] [ 5 3 7 ... 2 6 7]]
V: 反应image图像亮度情况[[186 187 191 ... 177 183 178] [187 189 192 ... 179 177 177] [187 188 190 ... 183 178 182] ... [154 155 153 ... 141 145 138] [155 153 150 ... 140 137 141] [154 154 154 ... 143 136 140]]
因为要使用cv2.inRange()函数,这个函数挺有意思,以后还要用到后续再说,它类似阈值处理。介于第二和第三参数之间的 置255,其他的置0 这个比较重要!lower_red = np.array([30, 30, 30])upper_red = np.array([225, 225, 225])mask = cv2.inRange(HSV, lower_red, upper_red) cv2.imshow('mask', mask)果然是二值图像!效果还不错
最后利用以前用过的与 加上掩码图,看一下效果。滤掉了一些颜色,保留了一些 有点特效的意思。maskAnd = cv2.bitwise_and(image, image, mask=mask)cv2.imshow('resource', image)cv2.imshow('maskAnd', maskAnd)cv2.waitKey(0)cv2.destroyAllWindows()对比源图和效果图
cv2.inRange() 介于第二和第三参数之间的 置255,其他的置0
H, S, V = cv2.split(HSV) 分离通道数据