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

OpenCV 图像梯度算子目录
1 Sobel算子
Sobel算子是一种图像边缘检测算子,它是一种空间滤波器,可以检测图像中的边缘,而梯度运算是一种求导数的方法,可以用来检测图像中的局部变化。
  
   - 
    
     
    
    
     
      import cv2
     
    
- 
    
     
    
    
     
      import numpy 
      as np
     
    
- 
    
     
    
    
     
      from numpy 
      import unicode
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      if __name__ == 
      '__main__':
     
    
- 
    
     
    
    
         
      # 不同算子的差异
     
    
- 
    
     
    
    
     
          img = cv2.imread(
      'D:/Jupyter_Notebooks/0.jpg', cv2.IMREAD_GRAYSCALE)
     
    
- 
    
     
    
    
     
          sobel_x = cv2.Sobel(img, cv2.CV_64F, 
      1, 
      0, ksize=
      3)
     
    
- 
    
     
    
    
     
          sobel_y = cv2.Sobel(img, cv2.CV_64F, 
      0, 
      1, ksize=
      3)
     
    
- 
    
     
    
    
     
          sobel_x = cv2.convertScaleAbs(sobel_x)
     
    
- 
    
     
    
    
     
          sobel_y = cv2.convertScaleAbs(sobel_y)
     
    
- 
    
     
    
    
     
          sobel_xy = cv2.addWeighted(sobel_x, 
      0.5, sobel_y, 
      0.5, 
      0)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
          cv2.imshow(
      "sobel_xy", sobel_xy)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
          img = cv2.imread(
      'D:/Jupyter_Notebooks/0.jpg', cv2.IMREAD_GRAYSCALE)
     
    
- 
    
     
    
    
     
          cv2.imshow(
      "img", img)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
          cv2.waitKey(
      0)
     
    
- 
    
     
    
    
     
          cv2.destroyAllWindows()
     
    
 

2 Scharr算子
Sobel算子是一种图像边缘检测算法,它可以检测图像中的水平边缘和垂直边缘。它使用卷积核来检测图像中的边缘,并且可以检测出图像中的细微变化。OpenCV是一个计算机视觉库,它提供了一系列的函数,可以用来处理图像,包括Sobel算子。OpenCV提供了一系列的函数,可以用来处理图像,包括Sobel算子,但它也提供了其他的图像处理算法,如Canny边缘检测算法,Hough变换算法等。
  
   - 
    
     
    
    
     
      import cv2
     
    
- 
    
     
    
    
     
      import numpy 
      as np
     
    
- 
    
     
    
    
     
      from numpy 
      import unicode
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      if __name__ == 
      '__main__':
     
    
- 
    
     
    
    
     
          img = cv2.imread(
      'D:/Jupyter_Notebooks/0.jpg', cv2.IMREAD_GRAYSCALE)
     
    
- 
    
     
    
    
     
          scharrx = cv2.Scharr(img, cv2.CV_64F, 
      1, 
      0)
     
    
- 
    
     
    
    
     
          scharry = cv2.Scharr(img, cv2.CV_64F, 
      0, 
      1)
     
    
- 
    
     
    
    
     
          scharrx = cv2.convertScaleAbs(scharrx)
     
    
- 
    
     
    
    
     
          scharry = cv2.convertScaleAbs(scharry)
     
    
- 
    
     
    
    
     
          scharrxy = cv2.addWeighted(scharrx, 
      0.5, scharry, 
      0.5, 
      0)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
          cv2.imshow(
      "scharrxy", scharrxy)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
          img = cv2.imread(
      'D:/Jupyter_Notebooks/0.jpg', cv2.IMREAD_GRAYSCALE)
     
    
- 
    
     
    
    
     
          cv2.imshow(
      "img", img)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
          cv2.waitKey(
      0)
     
    
- 
    
     
    
    
     
          cv2.destroyAllWindows()
     
    
 
3 laplacian算子
Laplacian算子是一种图像处理技术,它可以用来检测图像中的边缘和轮廓。它是一种二阶微分算子,可以用来检测图像中的边缘,并且可以用来检测图像中的噪声。它的基本原理是,它会计算图像中每个像素点的梯度,并且根据梯度的大小来检测图像中的边缘。
  
   - 
    
     
    
    
     
      import cv2
     
    
- 
    
     
    
    
     
      import numpy 
      as np
     
    
- 
    
     
    
    
     
      from numpy 
      import unicode
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      if __name__ == 
      '__main__':
     
    
- 
    
     
    
    
     
          img = cv2.imread(
      'D:/Jupyter_Notebooks/0.jpg', cv2.IMREAD_GRAYSCALE)
     
    
- 
    
     
    
    
     
          laplacian = cv2.Laplacian(img, cv2.CV_64F)
     
    
- 
    
     
    
    
     
          laplacian = cv2.convertScaleAbs(laplacian)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
          cv2.imshow(
      "laplacian", laplacian)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
          img = cv2.imread(
      'D:/Jupyter_Notebooks/0.jpg', cv2.IMREAD_GRAYSCALE)
     
    
- 
    
     
    
    
     
          cv2.imshow(
      "img", img)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
          cv2.waitKey(
      0)
     
    
- 
    
     
    
    
     
          cv2.destroyAllWindows()
     
    
 
OpenCV 通道分割与合并_双子座断点的博客-CSDN博客_opencv 通道合并
OpenCV ROI截取 、设置、保存_双子座断点的博客-CSDN博客
OpenCV 基础图像处理操作_双子座断点的博客-CSDN博客
OpenCV inRange 函数使用详解_inrange opencv_双子座断点的博客-CSDN博客
OpenCV 图像旋转、平移、缩放_双子座断点的博客-CSDN博客_opencv模板旋转和缩放
OpenCV 图像绘图、线条、文字、矩形_双子座断点的博客-CSDN博客_opencv 绘制线条
OpenCV 图像形态学处理_双子座断点的博客-CSDN博客
转载:https://blog.csdn.net/qq_37529913/article/details/128945932
 
					