我使用Python 2-7和OpenCV 3.2对图像执行了边缘检测,得到了如下图片所示的结果,即一像素宽的边缘不一定封闭(可能有“松散的端点”),并且可能有空洞。
现在我想获得这些边缘的“导数”,也就是每个点的“斜率”,如下图所示:
目前,我唯一能做到的是在本地进行操作。对于边缘的每个点(在下一个“放大”图片中为红色),我创建一个围绕它的圆圈(粉色),使用该圆圈遮罩边缘以获取红点的邻居,然后计算这两个邻居的斜率。
然而,如果边缘有洞(通常会出现这种情况)或靠近其他边缘(通常也是如此),掩蔽所有点会变得非常混乱,所以我想知道是否有更好的方法。我的第一个想法是样条插值,但您需要为给定边缘提供一个有序的点列表作为输入,除非使用像素邻居跟踪算法,否则很难实现。我还想到了findContours,但它需要封闭的边缘,否则它会产生一个一像素宽的边缘轮廓,即两条线在边缘的两侧开始于任意位置,简而言之,这是一团糟。是否有比我当前方法更清晰和更有效的方法来实现我想要的?OpenCV是否有任何资源,还是它在边缘检测后就完成了工作(我认为后者更有可能!)?附言:“我认为没有更好的方法”是我愿意接受的答案!