当前位置: 首页 > 编程笔记 >

Python中使用OpenCV(CV2)对图像进行边缘检测

阳凌
2023-03-14
本文向大家介绍Python中使用OpenCV(CV2)对图像进行边缘检测,包括了Python中使用OpenCV(CV2)对图像进行边缘检测的使用技巧和注意事项,需要的朋友参考一下

使用的模块:

为此,我们将使用opencv-python模块,该模块为我们提供了处理图像的各种功能

下载opencv-python

General Way:
pip install opencv-python

Pycharm Users:
Go to the project Interpreter and install this module from there.

opencv-python模块:

opencv-python是一个python库,它将解决计算机视觉问题并为我们提供编辑图像的各种功能。

注意:仅在灰度图像中可以进行边缘检测。

我们将在此脚本中做什么?

为了检测图像的边缘,我们将使用opencv-python的各种功能并提供阈值。

在本文中,我们将借助各种功能来检测图像的边缘,并且当我们下降时边缘的精度会提高,

  • Sobel 函数:此函数将创建水平和垂直边缘,然后,我们将使用按位或运算符将它们组合

  • Laplacian 函数:此函数是最简单的函数,只需要将灰度变量放入其中,就可以得到边缘检测到的图像。

  • Canny 函数:这是边缘检测功能最强大且最准确的功能。

让我们看一下代码:

1)使用Sobel函数

# 导入模块
import cv2

# 读取图像并将数据存储在变量中
image=cv2.imread("/home/abhinav/PycharmProjects/untitled1/b.jpg")

# 使它成为灰度
Gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

# 在sobel的帮助下实现
# 使sobel_horizontal
# 对于水平x轴= 1和yaxis = 0
# 对于垂直x轴= 0和y轴= 1
Horizontal=cv2.Sobel(Gray,0,1,0,cv2.CV_64F)

# 门槛就像 
# (variable,0,<x axis>,<y axis>,cv2.CV_64F)
Vertical=cv2.Sobel(Gray,0,0,1,cv2.CV_64F)

# 做按位运算
Bitwise_Or=cv2.bitwise_or(Horizontal,Vertical)# 显示边缘图像
cv2.imshow("Sobel Image",Bitwise_Or)
cv2.imshow("Original Image",Gray)
cv2.waitKey(0)cv2.destroyAllWindows()

输出:

Python

2)Laplacian函数

# 导入模块
import cv2

# 读取图像并将数据存储在变量中
image=cv2.imread("/home/abhinav/PycharmProjects/untitled1/b.jpg")

# 使它成为灰度
Gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

# 使拉普拉斯函数
Lappy=cv2.Laplacian(Gray,cv2.CV_64F)

cv2.imshow("Laplacian",Lappy)
cv2.imshow("Original",Gray)
cv2.waitKey(0)cv2.destroyAllWindows()

输出:

Python

3)使用Canny函数

# 导入模块
import cv2

# 读取图像并将数据存储在变量中
image=cv2.imread("/home/abhinav/PycharmProjects/untitled1/b.jpg")

# 使它成为灰度
Gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

# 使功能正常
canny=cv2.Canny(Gray,40,140)

# 阈值在bw 0和255之间变化
cv2.imshow("Canny",canny)
cv2.imshow("Original",Gray)
cv2.waitKey(0)cv2.destroyAllWindows()

输出:

Python

 类似资料:
  • 我正试图从彩色背景图像中提取文本。我正在尝试的一种方法是边缘检测。用它我把原始图像转换成我可以处理的图像。这将消除图像中的所有颜色,只留下边缘。 我使用此代码获取边缘图像 我的问题是,在我得到这些图像后,我如何才能追踪这些图像中的字母?任何帮助都会很好。谢谢你们 这些是原始图像和边缘检测图像。 原始图像 边缘检测图像

  • Canny边缘检测用于检测图像中的边缘。 它接受灰度图像作为输入,并使用多级算法。可以使用类的方法在图像上执行此操作,以下是此方法的语法。 该方法接受以下参数 - image - 表示此操作的源(输入图像)的对象。 edges - 表示此操作的目标(边缘)的对象。 threshold1 - 类型为的变量表示滞后过程的第一个阈值。 threshold2 - 类型为的变量表示滞后过程的第二个阈值。 示

  • 本文向大家介绍如何利用Python 进行边缘检测,包括了如何利用Python 进行边缘检测的使用技巧和注意事项,需要的朋友参考一下 为何检测边缘? 我们首先应该了解的问题是:“为什么要费尽心思去做边缘检测?”除了它的效果很酷外,为什么边缘检测还是一种实用的技术?为了更好地解答这个问题,请仔细思考并对比下面的风车图片和它的“仅含边缘的图”: 可以看到,左边的原始图像有着各种各样的色彩、阴影,而右边的

  • 我想检测边缘的图像:点击这里通过在程序中找到精明的边缘绘制的边缘:点击这里我正在使用带有处理的opencv库,这样我就可以执行边缘检测,以便将我的图像分割成不同的对象/组件。我已经能够使用精明的边缘检测来实现这一点。这给了我第二张黑色背景的图像,灰色线条表示检测到边缘的位置。然而,我需要能够将这张带有边缘的黑色图像分割成可识别的区域/对象,程序将理解为不同的区域/对象——我在想是否可以为每个由边缘

  • 我不熟悉Python中的图像处理,我正在尝试解决一个常见问题。我有一张有人签名的照片。我想找到边缘并裁剪它以适合图像中的签名。 我尝试了Canny边缘检测和使用现有解决方案列表裁剪图像 我尝试了一些解决方案: > https://www.quora.com/How-can-I-detect-an-object-from-static-image-and-crop-it-from-the-image

  • 我想检测具有一定角度/方向的边缘。 根据SO中的帖子改编,我想出了使用OpenCV幅值、相位和Sobel函数来过滤不需要的边缘点。然后使用幅值图像(以相位图像为条件)输出边缘点。 然而,结果与Canny边缘函数不相似。最好是过滤掉带有不需要的角度的边缘,但检测到的边缘是点的斑点,而不是细线边缘 在使用findContour后,左边缘图像也会绘制出来,但这几乎没有帮助 1) 为了模仿精明的处理,还应