• 发文
  • 评论
  • 微博
  • 空间
  • 微信

在OpenCV中使用Canny边缘检测

磐创AI 2023-05-12 11:45 发文

边缘检测是非常常见和广泛使用的图像处理,对于许多不同的计算机视觉应用非常必要,如数据提取,图像分割,在更细粒度的特征提取和模式识别中。它降低了图像中的噪声和细节数量,但保留了图像的结构。

Python中的Canny边缘检测是计算机视觉中最流行的边缘检测方法之一。以下是Canny边缘检测的步骤:

1.使用高斯平滑来减少噪声

2.计算梯度

3.应用非极大值抑制以减少噪声

4.找到上下阈值

5.应用阈值。

幸运的是,OpenCV库有cv2.canny()函数,可为我们执行Canny边缘检测。

在本文中,我们将直接使用OpenCV执行边缘检测。

import cv2 

import matplotlib.pyplot as plt 

我们将使用以下图片进行今天的教程:

Canny边缘检测的第一步是应用高斯模糊。在模糊之前,将图像转换为灰度也很重要:

image = cv2.imread("meter.jpg")

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

blurred = cv2.GaussianBlur(gray, (5, 5), 0)

现在,我们可以直接将cv2.Canny()方法应用于这个模糊的图像。

很简单。它需要三个参数:图像本身,较低的阈值和较高的阈值。选择这些阈值是棘手的。对于每个图像,这些阈值都将是不同的。

对于此图像,我们将尝试三个不同的范围并观察发生了什么:

wide = cv2.Canny(blurred, 50, 200)

mid = cv2.Canny(blurred, 30, 150)

tight = cv2.Canny(blurred, 210, 250)

在这里,我使用了三种不同类型的范围。在wide中,阈值的值具有宽范围。在mid中,阈值的值在中间范围内,在tight中,阈值的值具有紧密的范围,仅为210到250,非常接近。

为了检查图像,我只保存了这三个图像(wide,mid和tight)。

以下是wide的结果:

这是mid范围的结果:

tight的结果:

如果我们注意这三张图片,我相信中等范围给出了更加坚实的边缘。

记住,你不能一概而论这些范围。对于不同的图像,可能需要使用不同的范围。这就是为什么这么棘手的原因。

好消息是,有一些可用的统计技巧可以用来找到下限和上限阈值,而不需要像我们之前看到的试错方法那样。

这是自动边缘检测的函数:

def auto_canny_edge_detection(image, sigma=0.33):

    md = np.median(image)

    lower_value = int(max(0, (1.0-sigma) * md))

    upper_value = int(min(255, (1.0+sigma) * md))

    return cv2.Canny(image, lower_value, upper_value)

在上面的函数中,首先找到图像数组中的中位像素值。然后使用这个中位数和一个常数sigma值,可以找到下限和上限阈值。

这里使用了一个sigma值为0.33。在大多数应用程序中,0.33作为sigma值是有效的。但在某些情况下,如果它不能给出好的结果,请尝试一些其他的sigma值。

这是我们之前创建的模糊图像上使用auto_canny_edge_detection方法的结果:

auto_edge = auto_canny_edge_detection(blurred)

cv2.imwrite("auto.jpg", auto_edge)

这就是auto.jpg的样子:

正如你所看到的,边缘在这里很清晰地出现了,而不需要尝试太多的阈值。

结论

在我看来,自动边缘检测函数为我们提供了最好的结果。

声明:本文为OFweek维科号作者发布,不代表OFweek维科号立场。如有侵权或其他问题,请及时联系我们举报。
2
评论

评论

    相关阅读

    暂无数据

    磐创AI

    人工智能前沿技术分享。...

    举报文章问题

    ×
    • 营销广告
    • 重复、旧闻
    • 格式问题
    • 低俗
    • 标题夸张
    • 与事实不符
    • 疑似抄袭
    • 我有话要说
    确定 取消

    举报评论问题

    ×
    • 淫秽色情
    • 营销广告
    • 恶意攻击谩骂
    • 我要吐槽
    确定 取消

    用户登录×

    请输入用户名/手机/邮箱

    请输入密码