Python边缘检测和曲率计算

python image-processing computer-vision

45068 观看

4回复

7574 作者的声誉

我知道之前已发布边缘检测问题(在Java中:计算图像中的对象数,与语言无关:图像边缘检测),但我想知道如何在python中实现它。

我在一些简单的形状(带有一些噪音的二进制形状)上围绕边缘进行边缘检测和曲率计算。我知道OpenCV有一些包装,但不确定哪一个更好:pyopencv,pycv,pycvf?

由于我基本上只做这两项任务,所以我也不确定自己实现它而不是使用库是否会更快。

作者: clwen 的来源 发布者: 2012 年 2 月 4 日

回应 (4)


12

5492 作者的声誉

决定

我们在积极开发的分段和边缘检测算法中scikit-image您可能会发现它们非常有用:

Scikit图像示例

作者: Stefan van der Walt 发布者: 07.02.2012 09:42

3

1569 作者的声誉

有一种非常简单的方法可以用scikit图像在python中找到轮廓。它只是几行代码,如下所示:

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

这将返回轮廓线的矢量表示。在每行的单独数组中。并且通过计算近似值也可以很容易地减少线中的点数。以下是源代码的更长描述:使用python进行图像矢量化

作者: mrbo 发布者: 21.07.2013 07:51

5

124059 作者的声誉

您可以使用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中,有一个特殊页面,其中说明了如何进行边缘检测。

作者: Salvador Dali 发布者: 30.08.2015 08:53

0

1585 作者的声誉

您可以使用不同的边缘检测器:Canny,Sobel,Laplacian,Scharr,Prewitt,Roberts。你可以用OpenCV做到这一点:

import cv2
img = cv2.imread('your_image.jpg', 0)

edges_canny = cv2.Canny(img, 100, 200)
edges_sobel = cv2.Sobel(img, 100, 200)
edges_laplacian = cv2.Laplacian(img, 100, 200)
edges_scharr = cv2.Scharr(img, 100, 200)

或者使用scikit-image

import cv2
from skimage import feature, filters 
img = cv2.imread('your_image.jpg', 0)

edges_canny = feature.canny(img)
edges_sobel = filters.sobel(img)
edges_laplace = filters.laplace(img)
edges_scharr = filters.scharr(img)
edges_prewitt = filters.prewitt(img)
edges_roberts = filters.roberts(img)

Canny边缘检测器可能是最常用和最有效的方法,也是最复杂的。有关上述方法之间区别的更多详细信息,请查看此博客文章

作者: tsveti_iko 发布者: 26.06.2019 02:00
32x32