OpenCV在HLS颜色空间中的泛色填充行为异常

abithluo  于 2023-02-13  发布在  其他
关注(0)|答案(1)|浏览(123)

我正在尝试使用OpenCV泛色填充算法。为了更好地解决图像中阴影引起的颜色差异,我首先将图像转换到HSV颜色空间hsv_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2HSV)
使用(int(10), int(0), int(0))的loDiff和upDiff,我希望泛色填充算法只将色调值与起始像素相差-10到+10的像素视为连接像素。
然而,在具有起始颜色(50,100,100)和具有仅色调不同的颜色的区域(60,100,100)的测试图像中,该颜色已经被仅(int(1), int(0), int(0))的upDiff填充。
是我误解了泛色填充算法吗?还是我错过了一些关于颜色空间转换的东西?

p1tboqfb

p1tboqfb1#

您对floodFill()的理解是正确的,但您在其他地方做错了。
像这样做。

import numpy as np
import cv2

img = np.zeros((3, 3, 3), 'uint8')
img[:, :] = (60, 100, 100)
img[1, 1] = (50, 100, 100)
print('img:\n', img[:, :, 0])

img2 = img.copy()
cv2.floodFill(img2, None, (1, 1), (0, 0, 0),
    loDiff=(10, 0, 0), upDiff=(1, 0, 0))
print('img2:\n', img2[:, :, 0])

img3 = img.copy()
cv2.floodFill(img3, None, (1, 1), (0, 0, 0),
    loDiff=(10, 0, 0), upDiff=(10, 0, 0))
print('img3:\n', img3[:, :, 0])

这将输出以下内容。

img:
 [[60 60 60]
 [60 50 60]
 [60 60 60]]
img2:
 [[60 60 60]
 [60  0 60]
 [60 60 60]]
img3:
 [[0 0 0]
 [0 0 0]
 [0 0 0]]

相关问题