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

 时间:2026-02-13 15:36:45

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)

  • 正弦余弦正切函数值是
  • 国考没带身份证怎么办
  • 微分法等计算三次根号1041的近似值的方法
  • 有效利用时间的方法有哪些
  • 野外骑马技术及安全保障攻略
  • 热门搜索
    美丽俏佳人旅游卫视 大连旅游景点地图 78月份适合去哪旅游 济南旅游团 旅游资讯网站 博鳌旅游风景区 福州旅游攻略自助游 江苏舜天海外旅游有限公司 恩施旅游局 十一月份适合去哪里旅游