ToB企服应用市场:ToB评测及商务社交产业平台

标题: 009:传统盘算机视觉之边缘检测 [打印本页]

作者: 道家人    时间: 2025-1-5 07:19
标题: 009:传统盘算机视觉之边缘检测
本文为合集收录,欢迎检察合集/专栏链接举行全部合集的系统学习。
  合集完备版请参考这里。
本节来看一个使用传统盘算机视觉方法来实现图片边缘检测的方法。
什么是边缘检测?

边缘检测是通过一些算法来识别图像中物体之间大概物体与配景之间的界限,也就是边缘。
图像边缘通常是图像中灰度变化明显的地方,标志着不同地区的分界限。
在一张图像中,边缘可以是物体的实际界限,也可以是纹理、颜色或亮度等特征变化比较明显的位置。
边缘检测有助于提取图像的结构信息,是许多盘算机视觉和图像处理惩罚任务的基础,例如物体识别、图像分割和目的跟踪。
比如下面这张图片,我用红笔粗略的画出了一些物体的边缘,猫耳朵和配景很明显的边缘,椅子和配景以及椅子和猫咪的边缘等。

常见的边缘检测算法

实现图片的边缘检测的算法有很多,常见的边缘检测算法包括:

以上几种算法是常见的边缘检测算法,感兴趣的话可以深入研究,这里不详细阐明每个算法的原理,但大致都是类似的过程:通过一个类似于前文陈诉的高斯滤波的滤波器窗口,来对图像像素值举行运算,得到像素突变的地方,以此作为边缘。
只不过这些窗口中的数值是颠末精心盘算和设计的,使得这些专业的算法(比如Canny算法)对边缘检测更为有用。
使用 Canny 算子对图像举行边缘检测
下面使用 opencv 库中的 Canny 函数,也就是Canny 算子来完成边缘检测。
  1. import cv2
  2. import matplotlib.pyplot as plt
  3. # 读取图像
  4. image = cv2.imread('cat.png', cv2.IMREAD_GRAYSCALE)
  5. # 使用 Canny 算子进行边缘检测
  6. edges = cv2.Canny(image, 50, 150)  # 调整阈值以获得最佳效果
  7. # 显示结果
  8. plt.figure(figsize=(8, 4))
  9. plt.subplot(1, 2, 1)
  10. plt.imshow(image, cmap='gray')
  11. plt.title('Original Image')
  12. plt.subplot(1, 2, 2)
  13. plt.imshow(edges, cmap='gray')
  14. plt.title('Canny Edges')
  15. plt.show()
复制代码
在上面的例子中,使用 cv2.Canny 函数中的 Canny 边缘检测算法,然后使用 matplotlib 库显示原始图像和检测到的边缘的图像。在实际使用时,你可以通过调整 cv2.Canny 函数的阈值来得到最佳的检测效果。
阈值是做什么的?

cv2.Canny 函数中的两个阈值参数指的是低阈值(threshold1)和高阈值(threshold2)。这两个阈值用于确定图像中的边缘。

在实践中,选择一个适当的高低阈值可以确保精确检测出图像中的边缘,这两个阈值的选择可能会因图像的特性而异,必要举行一些试验和调整。
下面是对一张图片举行边缘检测的效果,可以看到大量的边缘已经被检测出来了。

为什么要将图像转换为灰度图来做边缘检测

将图像转换为灰度图的一个重要原因是低落盘算的复杂性,同时保留关键的信息。RGB图像包含了红、绿、蓝三个通道的信息,而灰度图只包含强度信息。

除此之外,还可以淘汰图片的内存占用,尽管如此,如果在一些任务中我们确实必要颜色信息,可以在边缘检测的基础上进一步处理惩罚,使得在RGB的彩色图片上完成边缘检测。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4