我有一个函数,它生成一个二进制掩码的一个单一的'blob',看起来像这样:
(Note:这个蒙版是通过寻找一系列点的凸船体来生成的。我的“边界寻找”功能可以访问用于生成凸船体的两个点)
我想把紧挨着白色像素的黑色像素的值设置为一个特定的值,从而创建一个“边框”。
我尝试用以下代码进行边缘检测:cv2.Canny(image, 50, 150, apertureSize=3)
,以及模糊原始遮罩以创建新遮罩,但都没有得到所需的结果。
我发现的唯一成功的方法是蛮力。
pos = np.where(image > 0)
for x, y in zip(pos[1], pos[0]):
neighbours = [(y, x - min(x, 1)), (y, x + min(image.shape[1] - 1 - x, 1)), (y - min(y, 1), x), (y + min(image.shape[0] - 1 - y, 1), x)]
for a, b in neighbours:
if image[a, b] == 0:
image[a, b] = 100
有没有一种方法可以使用Cv2来实现相同的结果?
1条答案
按热度按时间kxeu7u2r1#
下面的代码查找并绘制输入图像上值为255的像素的轮廓。
输入图像
输出图像