使用Python OpenCV获取图像中的颜色范围

时间:2016-09-27 12:31:12

标签: python opencv

我正在尝试建造一个便携式绿屏照​​相亭。我们无法提前了解光照条件,因此我无法对色度键的颜色值进行硬编码。

我认为解决这个问题最简单的方法就是建立一个校准脚本来拍摄空白背景,得到最高的"和#34;最低"它的颜色,并用它们来制作背景蒙版。

我遇到了麻烦,因为虽然我可以在每个频道中获得最高或最低值,但不能保证当三者合并时它们与图像的实际颜色范围相匹配。

更新:我已更改为仅使用色调通道。这有很大帮助,但仍然不是完美的。我认为更好的照明会有所作为,但如果你能看到任何方式来帮助我,我将不胜感激。

这是我的(用更新编辑)

import cv2
import numpy as np



screen = cv2.imread("screen.jpg")
test = cv2.imread("test.jpg")

hsv_screen = cv2.cvtColor(screen, cv2.COLOR_BGR2HSV)
hsv_test = cv2.cvtColor(test, cv2.COLOR_BGR2HSV)

hueMax = hsv_screen[:,:,0].max()
hueMin = hsv_screen[:,:,0].min()

lowerBound = np.array([hueMin-10,100,100], np.uint8)
upperBound = np.array([hueMax+10,255,255], np.uint8)


mask = cv2.inRange(hsv_test,lowerBound,upperBound)
cv2.imwrite("mask.jpg",mask)

output_img = cv2.bitwise_and(test,test,mask=inv_mask)
cv2.imwrite("output.jpg",output_img)

屏幕和测试图像

screen.jpg screen

test.jpg放在 test.jpg

1 个答案:

答案 0 :(得分:2)

HUE颜色有指定的间隔,得到绿色间隔,然后使用它做inRange,忽略饱和度和值,这将给你所有的绿色度,以尽量减少噪音,使值范围为从20%到80%,这将避免过多的光线或太多的黑暗区域,并确保您只在屏幕上的任何地方获得绿色。 仅使用HUE通道进行检测是可靠的。