Python 边缘检测和曲率计算

10 投票
4 回答
54454 浏览
提问于 2025-04-17 12:18

我知道边缘检测的问题之前已经有人提过了(在Java中:统计图像中的物体数量,不特定语言:图像边缘检测),但我想知道怎么在Python中实现这个功能。

我正在对一些简单的形状进行边缘检测和边缘的曲率计算(这些形状是二进制的,还有一些噪声)。我知道有一些OpenCV的封装库,但不太确定哪个更好:pyopencv、pycv还是pycvf?

因为我基本上只做这两个任务,所以我也不确定自己实现会不会比使用库更快。

4 个回答

3

在Python中,用scikit-image库找到轮廓的方法非常简单。其实只需要几行代码,像这样:

    from skimage import measure
    contours = measure.find_contours(gimg, 0.8)

这段代码会返回轮廓线的向量表示,每条线都会有一个单独的数组。而且,如果你想减少一条线上的点的数量,可以通过计算一个近似值来实现。这里有一个稍微详细一点的说明和源代码:用Python进行图像向量化

6

你可以很简单地用Python里的scipy库来实现边缘检测。

from scipy import ndimage
edge_horizont = ndimage.sobel(greyscale, 0)
edge_vertical = ndimage.sobel(greyscale, 1)
magnitude = np.hypot(edge_horizont, edge_vertical)

这里有一张原始图片和经过边缘检测后的图片的对比。 在这里输入图片描述

在scikit-image库中,有一个专门的页面,里面详细解释了如何进行边缘检测

13

我们在正在积极开发的 scikit-image 库中,有一些分割和边缘检测的算法,你可能会觉得这些很有用:

Scikit Images 示例

撰写回答