Python:如何将区域保持在canny close edge';s区

Python:如何将区域保持在canny close edge';s区,python,python-3.x,edge-detection,Python,Python 3.x,Edge Detection,我用canny算法来寻找边缘 接下来,我想将区域保持在闭合曲线内 我的代码示例是: import cv2 import numpy as np from matplotlib import pyplot as plt import scipy.ndimage as nd from skimage.morphology import watershed from skimage.filters import sobel img1 = cv2.imread('coins.jpg') img = c

我用canny算法来寻找边缘

接下来,我想将区域保持在闭合曲线内

我的代码示例是:

import cv2
import numpy as np
from matplotlib import pyplot as plt
import scipy.ndimage as nd
from skimage.morphology import watershed
from skimage.filters import sobel

img1 = cv2.imread('coins.jpg')
img = cv2.imread('coins.jpg',0)

edges= cv2.Canny(img,120,200)

markers = np.zeros_like(img)
markers[edges<50] = 0
markers[edges==255] = 1
img1[markers == 1] = [0,0,255]
img1[markers == 0] = [255,255,255]

cv2.imshow('Original', img)
cv2.imshow('Canny', img1)

#Wait for user to press a key
cv2.waitKey(0)
导入cv2
将numpy作为np导入
从matplotlib导入pyplot作为plt
将scipy.ndimage导入为nd
从skimage.com导入分水岭
从skimage.filters导入sobel
img1=cv2.imread('coins.jpg')
img=cv2.imread('coins.jpg',0)
边缘=cv2.Canny(img,120200)
标记=np.类零(img)

markers[edges我建议您使用联合查找结构来获取img1中白色像素的连接组件(您可能希望在维基百科上找到此算法的详细信息:)

一旦你有了连接的组件,我最好的想法是考虑在你的图片的边框上不包含任何点的组合组件(它们应该对应于你的硬币的内部),并用IMG的颜色对它们进行颜色。


当然,您的硬币之间可能有一些三角形,这些三角形仍将着色,但您可以手动移除相应的连接部件。

不完全如此。硬币轮廓不是连续的,因此任何类型的填充都会泄漏

您可以通过某种形式的形态处理(侵蚀)来修复边缘,但这会使硬币接触,并在它们之间形成无法触及的区域

作为备用解决方案,您可以尝试在磁盘内部使用Hough圆检测器和遮罩