gpt4 book ai didi

Python OpenCV - cv.inRange() "sensitivity"?

转载 作者:太空宇宙 更新时间:2023-11-03 22:10:06 37 4
gpt4 key购买 nike

img = cv2.imread('/home/user/Documents/workspace/ImageProcessing/img.JPG');
image = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

#red, blue, yellow, and gray
boundaries = [
([17, 15, 100], [50, 56, 200]),
([86, 31, 4], [220, 88, 50]),
([25, 146, 190], [62, 174, 250]),
([103, 86, 65], [145, 133, 128])]


for i, (lower, upper) in enumerate(boundaries):

lower = np.array(lower, dtype="uint8")
upper = np.array(upper, dtype="uint8")

mask = cv2.inRange(image, lower, upper)
output = cv2.bitwise_and(image, image, mask=mask)

cv2.imwrite(str(i) + 'image.jpg', output)

我正在尝试(分别)从图像中分离出红色、蓝色、黄色和灰色。到目前为止它正在工作,但是“灵敏度”太低了。该算法缺少一些较小的色点。有没有办法校准这个?谢谢!

编辑:输入图像 input

输出
output1 output2 output3 output4

最佳答案

inRange 函数没有内置灵敏度。它只比较值。 inRange(x,10,20) 只会给你 {10,11,...,20}。

克服这个问题的一种方法是引入您自己的敏感性度量。

s = 5 # for example sensitivity=5/256 color values in range [0,255]

for i, (lower, upper) in enumerate(boundaries):

lower = np.array([color-s if color-s>-1 else 0 for color in lower], dtype="uint8")
upper = np.array([color+s if color+s<256 else 255 for color in upper], dtype="uint8")

mask = cv2.inRange(image, lower, upper)
output = cv2.bitwise_and(image, image, mask=mask)

cv2.imwrite(str(i) + 'image.jpg', output)

或者您可以预先对图像进行平滑处理以去除此类噪点像素。这将使像素值彼此更接近,从而使边界外的像素值可能更接近范围。

关于Python OpenCV - cv.inRange() "sensitivity"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41683152/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com