返回包含某个像素坐标的特定轮廓

问题描述 投票:0回答:1

我正在处理这样的图像:

我需要的是一个包含所有接触图像顶部和底部的轮廓的列表。目前,我正在做的是找到图像的所有轮廓,然后迭代它们以丢弃不满足条件的轮廓。我的代码如下:

contours, hier= cv2.findContours(projection,cv2.RETR_LIST,cv2.CHAIN_APPROX_NONE)    
for contour in contours:
 if 0 in contour[:,0,1] and rows in contour[:,0,1]:
  validContours.append(contour)

我需要它尽可能快地运行,所以我只想检查第一行像素。

我认为实现这一目标的长期但可靠的方法是从头开始实施另一种算法。

我的另一个想法是使用洪水填充函数算法,以便使用像素数据为空白图像和另一个图像着色,然后仅将此数据传输到“完成的”图像,这样我就只有彩色数据。

如果有人有任何建议我很乐意接受!

python opencv image-processing
1个回答
1
投票

您可以尝试使用Flood Fill算法。

import cv2
im = cv2.imread('VlKak.png', cv2.IMREAD_GRAYSCALE)
h, w = im.shape
mask = im.copy()
mask[0, :] = 255
mask[-1, :] = 255
flood_fill = cv2.floodFill(mask, None, (0, 0), 0)[1]
flood_fill = cv2.floodFill(flood_fill, None, (h, 0), 0)[1]
result = cv2.bitwise_xor(im, flood_fill)

结果:

© www.soinside.com 2019 - 2024. All rights reserved.