使用OpenCV | Sobel边缘检测方法检测图像边缘的Python程序

以下程序检测直播视频内容中帧的边缘。该代码只能在linux环境下编译。在运行程序之前,请确保系统中安装了openCV。 下载以下要求的步骤:

null
  • 在终端上运行以下命令,从Ubuntu或Debian存储库安装它。
sudo apt-get install libopencv-dev python-opencv
  • 或者,要从官方网站下载OpenCV,请运行以下命令:
bash install-opencv.sh
  • 在你的终端上。
  • 输入你的sudo密码,你就安装了OpenCV。

边缘检测原理

边缘检测涉及数学方法,以找到图像中像素强度亮度发生明显变化的点。

  • 我们要做的第一件事就是找到 坡度 在灰度图像中,我们可以在x和y方向找到类似边缘的区域。梯度是导数的多变量推广。虽然导数可以定义在单个变量的函数上,但对于多个变量的函数,梯度会取代它。
  • 梯度是向量值函数,而导数是标量值函数。就像导数一样, 梯度表示函数图切线的斜率 更准确地说,梯度指向函数最大增长率的方向,其大小是曲线在该方向的斜率。

注:在计算机视觉中,从黑色到白色的过渡被认为是正斜率,而从白色到黑色的过渡被认为是负斜率。

python

# Python program to  Edge detection
# using OpenCV in Python
# using Sobel edge detection
# and laplacian method
import cv2
import numpy as np
#Capture livestream video content from camera 0
cap = cv2.VideoCapture( 0 )
while ( 1 ):
# Take each frame
_, frame = cap.read()
# Convert to HSV for simpler calculations
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# Calculation of Sobelx
sobelx = cv2.Sobel(frame,cv2.CV_64F, 1 , 0 ,ksize = 5 )
# Calculation of Sobely
sobely = cv2.Sobel(frame,cv2.CV_64F, 0 , 1 ,ksize = 5 )
# Calculation of Laplacian
laplacian = cv2.Laplacian(frame,cv2.CV_64F)
cv2.imshow( 'sobelx' ,sobelx)
cv2.imshow( 'sobely' ,sobely)
cv2.imshow( 'laplacian' ,laplacian)
k = cv2.waitKey( 5 ) & 0xFF
if k = = 27 :
break
cv2.destroyAllWindows()
#release the frame
cap.release()


图像导数的计算

数字图像由矩阵表示,该矩阵在行和列中存储每个像素的RGB/BGR/HSV(图像所属的颜色空间)值。 矩阵的导数由一个叫做 拉普拉斯的 .为了计算拉普拉斯函数,你需要计算前两个导数,叫做 索贝尔 ,其中每一个都考虑了某个方向上的梯度变化:一个水平,另一个垂直。

  • 水平索贝尔导数(索贝尔x) :它是通过将图像与一个称为核的矩阵进行卷积得到的,该矩阵的大小总是奇数。大小为3的内核是最简单的情况。
  • 垂直索贝尔导数(索贝尔y) :它是通过将图像与一个称为核的矩阵进行卷积得到的,该矩阵的大小总是奇数。大小为3的内核是最简单的情况。
  • 卷积 通过以下方法计算:图像表示原始图像矩阵,滤波器为核心矩阵。

Convolving an image with a kernel

  • 因素 = 11 – 2- 2- 2- 2- 2 = 3 抵消 = 0 加权和 = 124*0 + 19*(-2) + 110*(-2) + 53*11 + 44*(-2) + 19*0 + 60*(-2) + 100*0 = 117 O[4,2] = (117/3) + 0 = 39 因此,为了得到拉普拉斯近似值,我们需要将之前的两个结果(Sobelx和Sobely)结合起来,并将其存储在拉普拉斯近似值中。

参数:

  • cv2。索贝尔(): 函数cv2。Sobel(frame,cv2.CV_64F,1,0,ksize=5)可以写成
cv2.Sobel(original_image,ddepth,xorder,yorder,kernelsize)
  • 其中第一个参数是原始图像,第二个参数是目标图像的深度。当ddepth=-1/CV_64F时,目标图像将与源图像具有相同的深度。第三个参数是导数x的阶数。第四个参数是导数y的阶数。在计算Sobelx时,我们将把xorder设置为1,把yorder设置为0,而在计算Sobely时,情况将相反。最后一个参数是扩展Sobel内核的大小;它必须是1、3、5或7。
  • cv2。拉普拉斯的 :在函数中
cv2.Laplacian(frame,cv2.CV_64F)
  • 第一个参数是原始图像,第二个参数是目标图像的深度。当深度=-1/CV_64F时,目标图像将与源图像具有相同的深度。

边缘检测应用

  • 在保留图像结构的同时,减少图像中不必要的信息。
  • 提取图像的重要特征,如曲线、角点和直线。
  • 识别对象、边界和分割。
  • 在计算机视觉和识别中起着重要作用

相关文章: 基于Canny边缘检测方法的边缘检测 本文由 普拉蒂玛·乌帕迪亚 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享