使用形态学梯度运算进行边缘检测(python)

2025-10-04 04:46:06

1、opencv的形态学函数模块里morphologyEx函数提供了MORPH_GRADIENT让我们能够完成梯度运算。

数学方法: 膨胀操作与腐蚀的差。

具体实现有两种:

1)morphologyEx

2)根据定义: 膨胀 - 腐蚀

下面分别进行讨论。

此图为原图和叠加效果

使用形态学梯度运算进行边缘检测(python)

使用形态学梯度运算进行边缘检测(python)

2、还是以火箭为例

import numpy as np

import cv2 as  cv

import copy

image = cv.imread('c:\\rocket.jpg')

cv.imshow("image", image)

gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)

cv.imshow("gray", gray)

转成灰度

使用形态学梯度运算进行边缘检测(python)

3、ret, thresholdImg = cv.threshold(gray, 170, 255, cv.THRESH_BINARY)

cv.imshow("thresholdImg", thresholdImg)

使用形态学梯度运算进行边缘检测(python)

4、kernel = cv.getStructuringElement(cv.MORPH_CROSS,(5, 5))

#腐蚀图像

erodImg = cv.erode(thresholdImg, kernel)

#显示腐蚀后的图像

cv.imshow("erodImg1", erodImg)

#膨胀图像

dilateImg = cv.dilate(thresholdImg, kernel)

#显示膨胀后的图像

cv.imshow("dilateImg1", dilateImg)

使用形态学梯度运算进行边缘检测(python)

使用形态学梯度运算进行边缘检测(python)

5、方法一:

# 形态学梯度gradientImg = cv.morphologyEx(thresholdImg, cv.MORPH_GRADIENT, kernel)cv.imshow("gradientImg", gradientImg)

使用形态学梯度运算进行边缘检测(python)

6、方法二:

#将两幅图像相减获得边,第一个参数是膨胀后的图像,第二个参数是腐蚀后的图像gradientImg2 = cv.subtract(dilateImg, erodImg)cv.imshow("gradientImg2", gradientImg2)

使用形态学梯度运算进行边缘检测(python)

7、#对二值图每个像素取反 方便叠加

notImg = cv.bitwise_not(gradientImg)

cv.imshow("notImg", notImg)

叠加效果1

andImg1 = cv.bitwise_and(image, image, mask=gradientImg)

cv.imshow("andImg1", andImg1)

叠加效果2

andImg2 = cv.bitwise_and(image, image, mask=notImg)

cv.imshow("andImg2", andImg2)

cv.waitKey(0)cv.destroyAllWindows()

使用形态学梯度运算进行边缘检测(python)

使用形态学梯度运算进行边缘检测(python)

使用形态学梯度运算进行边缘检测(python)

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢