飞道的博客

OpenCV 图像梯度算子

281人阅读  评论(0)

        本文是OpenCV图像视觉入门之路的第12篇文章,本文详细的介绍了图像梯度算子的各种操作,例如:Sobel算子Scharr算子laplacian算子等操作。

OpenCV 图像梯度算子目录

1 Sobel算子

2 Scharr算子

3 laplacian算子


1 Sobel算子

        Sobel算子是一种图像边缘检测算子,它是一种空间滤波器,可以检测图像中的边缘,而梯度运算是一种求导数的方法,可以用来检测图像中的局部变化。


  
  1. import cv2
  2. import numpy as np
  3. from numpy import unicode
  4. if __name__ == '__main__':
  5. # 不同算子的差异
  6. img = cv2.imread( 'D:/Jupyter_Notebooks/0.jpg', cv2.IMREAD_GRAYSCALE)
  7. sobel_x = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize= 3)
  8. sobel_y = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize= 3)
  9. sobel_x = cv2.convertScaleAbs(sobel_x)
  10. sobel_y = cv2.convertScaleAbs(sobel_y)
  11. sobel_xy = cv2.addWeighted(sobel_x, 0.5, sobel_y, 0.5, 0)
  12. cv2.imshow( "sobel_xy", sobel_xy)
  13. img = cv2.imread( 'D:/Jupyter_Notebooks/0.jpg', cv2.IMREAD_GRAYSCALE)
  14. cv2.imshow( "img", img)
  15. cv2.waitKey( 0)
  16. cv2.destroyAllWindows()

2 Scharr算子

        Sobel算子是一种图像边缘检测算法,它可以检测图像中的水平边缘和垂直边缘。它使用卷积核来检测图像中的边缘,并且可以检测出图像中的细微变化。OpenCV是一个计算机视觉库,它提供了一系列的函数,可以用来处理图像,包括Sobel算子。OpenCV提供了一系列的函数,可以用来处理图像,包括Sobel算子,但它也提供了其他的图像处理算法,如Canny边缘检测算法,Hough变换算法等。


  
  1. import cv2
  2. import numpy as np
  3. from numpy import unicode
  4. if __name__ == '__main__':
  5. img = cv2.imread( 'D:/Jupyter_Notebooks/0.jpg', cv2.IMREAD_GRAYSCALE)
  6. scharrx = cv2.Scharr(img, cv2.CV_64F, 1, 0)
  7. scharry = cv2.Scharr(img, cv2.CV_64F, 0, 1)
  8. scharrx = cv2.convertScaleAbs(scharrx)
  9. scharry = cv2.convertScaleAbs(scharry)
  10. scharrxy = cv2.addWeighted(scharrx, 0.5, scharry, 0.5, 0)
  11. cv2.imshow( "scharrxy", scharrxy)
  12. img = cv2.imread( 'D:/Jupyter_Notebooks/0.jpg', cv2.IMREAD_GRAYSCALE)
  13. cv2.imshow( "img", img)
  14. cv2.waitKey( 0)
  15. cv2.destroyAllWindows()

3 laplacian算子

        Laplacian算子是一种图像处理技术,它可以用来检测图像中的边缘和轮廓。它是一种二阶微分算子,可以用来检测图像中的边缘,并且可以用来检测图像中的噪声。它的基本原理是,它会计算图像中每个像素点的梯度,并且根据梯度的大小来检测图像中的边缘。


  
  1. import cv2
  2. import numpy as np
  3. from numpy import unicode
  4. if __name__ == '__main__':
  5. img = cv2.imread( 'D:/Jupyter_Notebooks/0.jpg', cv2.IMREAD_GRAYSCALE)
  6. laplacian = cv2.Laplacian(img, cv2.CV_64F)
  7. laplacian = cv2.convertScaleAbs(laplacian)
  8. cv2.imshow( "laplacian", laplacian)
  9. img = cv2.imread( 'D:/Jupyter_Notebooks/0.jpg', cv2.IMREAD_GRAYSCALE)
  10. cv2.imshow( "img", img)
  11. cv2.waitKey( 0)
  12. cv2.destroyAllWindows()

 

OpenCV 通道分割与合并_双子座断点的博客-CSDN博客_opencv 通道合并

OpenCV ROI截取 、设置、保存_双子座断点的博客-CSDN博客

OpenCV 基础图像处理操作_双子座断点的博客-CSDN博客

OpenCV inRange 函数使用详解_inrange opencv_双子座断点的博客-CSDN博客

OpenCV 图像旋转、平移、缩放_双子座断点的博客-CSDN博客_opencv模板旋转和缩放

OpenCV 图像绘图、线条、文字、矩形_双子座断点的博客-CSDN博客_opencv 绘制线条

OpenCV 图像平滑处理_双子座断点的博客-CSDN博客

OpenCV 图像形态学处理_双子座断点的博客-CSDN博客


转载:https://blog.csdn.net/qq_37529913/article/details/128945932
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场