opencv学习笔记五——梯度计算/边缘检测

要获取轮廓,可对一张图像做先膨胀后腐蚀的操作,然后膨胀后的结果减去腐蚀的结果。

1. Sobel算子

请添加图片描述
dst = cv2.Sobel(src, ddepth, dx, dy, ksize)

  • ddepth:图像的深度
  • dxdy分别表示水平和垂直方向
  • ksizeSobel算子大小
image1 = cv2.imread('./ro.png')
plt.imshow(image1);

请添加图片描述

image1 = cv2.imread('./ro.png')
plt.imshow(image1);
image2 = cv2.Sobel(image1, cv2.CV_64F, 1, 0, ksize=3)
plt.imshow(image2);

请添加图片描述

白到黑的卷积计算是正数,黑到白的卷积计算就是负值了,所有的负数会被截断为0,所以要取绝对值

计算x方向梯度

image2 = cv2.Sobel(image1, cv2.CV_64F, 1, 0, ksize=3)
image2 = cv2.convertScaleAbs(image2)
plt.imshow(image2);

请添加图片描述

计算x方向梯度

image3 = cv2.Sobel(image1, cv2.CV_64F, 0, 1, ksize=3)
image3 = cv2.convertScaleAbs(image3)
plt.imshow(image3);

请添加图片描述

获得图像的轮廓

image4 = cv2.addWeighted(image2, 0.5, image3, 0.5, 0)
plt.imshow(image4);

请添加图片描述
换一张图试试

import cv2
import matplotlib.pyplot as plt
image = cv2.imread('image.png')
image2 = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
image2 = cv2.convertScaleAbs(image2)
image3 = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)
image3 = cv2.convertScaleAbs(image3)
image4 = cv2.addWeighted(image2, 0.5, image3, 0.5, 0)
image4 = cv2.cvtColor(image4, cv2.COLOR_BGR2RGB)
plt.imshow(image4);

请添加图片描述

2. Scharr算子

请添加图片描述
用法相同,只是计算的值会比较大,会更敏感些

3. laplacian算子

请添加图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44669966/article/details/125644158