我正在开发一种颜色掩蔽算法,使用Python 3.9
和cv2
提取图像中的重叠感兴趣区域。
为了实现这一点,我实现了K-Means聚类,将相似的像素分组,将图像的调色板减少到只有几种色调。然后,我使用np.unique
查找存在的唯一RGB值,最后用提供的值之一过滤原始图像。
从下图中,我可以成功地提取所需的区域:
提取区域:
正如观察到的,结果仍然包含一些来自感兴趣区域周围的底层区域(火焰)的噪声。我尝试使用cv2.GaussianBlur
和cv2.ConnectedComponentsWithStats
来清除它,但似乎无法正确去除它。下面是我想要的输出(手动去除噪声):
我如何通过编程实现相同(或类似)的结果?
注意:提取此区域的RGB过滤器可定义如下:
rgb = np.array([198, 154, 107])
# Making a range with 25% offsets
low = rgb * 0.75
high = rgb * 1.25
# Defining the mask
mask = cv2.inRange(image, low, high)
# Applying mask
result = cv2.bitwise_and(image, image, mask=mask)
1条答案
按热度按时间amrnrhlw1#
如果你决定根据色调来选择感兴趣的区域,可以考虑将你的图像转换到其他颜色空间,比如HSV或LAB。也许甚至用CMYK - 4数字来表示一种颜色也可以更好地将棕色与红色和黄色区分开来。这些可以让你更容易地通过像素颜色的聚类欧氏距离来找到“棕色”。
或者,也许捕捉鸡周围的黑色笔划会是一个更容易的任务,因为黑色比棕色更不同于红色/黄色?