多语言展示
当前在线:936今日阅读:145今日分享:43

python进行HSV颜色空间转换

HSV时常用的颜色空间,个人感觉常用的就是RGB 灰度 二值 和 YUV 还有YCbCr 这几种,说实话色彩领域博大精深,非有大智慧和大才能者一般很难驾驭颜色领域。那是专业美术家的事。这里只是利用函数方便我们了解一点点HSV,盲人摸象管中窥豹。
工具/原料
1

opencv python

2

pycharm windows7

方法/步骤
1

色调(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')先展示源图情况。

2

转化成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出来是这个效果还是有点没想到,

3

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色调.

4

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]]

5

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]]

6

因为要使用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)果然是二值图像!效果还不错

7

最后利用以前用过的与 加上掩码图,看一下效果。滤掉了一些颜色,保留了一些 有点特效的意思。maskAnd = cv2.bitwise_and(image, image, mask=mask)cv2.imshow('resource', image)cv2.imshow('maskAnd', maskAnd)cv2.waitKey(0)cv2.destroyAllWindows()对比源图和效果图

注意事项
1

cv2.inRange() 介于第二和第三参数之间的 置255,其他的置0

2

H, S, V = cv2.split(HSV) 分离通道数据

推荐信息