目标分割-边缘检测法

对比图像增强前后使用canny算子的效果,以及使用sobel算子二阶导数的效果:

import cv2
import matplotlib.pyplot as plt
#canny算子
'''
步骤:
1、彩色图像转换为灰度图像统一梯度 
2、高斯滤波,滤除噪声点 
3、高亮处理,增强图像梯度对比
4、形态学操作,填补图像漏洞,连接断线
5、canny算子提取边缘
5.1、通过sobel算子计算图像梯度,根据梯度计算边缘幅值与角度 
5.2、非极大值抑制,相当于求取二阶导 
5.3、双阈值边缘连接处理 
6、二值化图像输出结果
'''
​
#1.原图转灰度图
img=cv2.imread(r"img.jpg",0)
​
#2.高斯模糊处理
GaussianBlur=cv2.GaussianBlur(img,(9,9),3)
​
# 3.高亮处理,增强差异度/梯度
ScaleAbs=cv2.convertScaleAbs(GaussianBlur,alpha=8,beta=0)
​
#4.形态学闭操作填补漏洞
kerner=cv2.getStructuringElement(cv2.MORPH_RECT,(9,9))
MORPH_CLOSE=cv2.morphologyEx(ScaleAbs,cv2.MORPH_CLOSE,kerner)
​
#5.canny算子提取边缘
# 通过sobel算子计算图像梯度,根据梯度计算边缘幅值与角度
# 非极大值抑制
# 双阈值边缘连接处理
Canny1=cv2.Canny(img,100,150)
Canny2=cv2.Canny(MORPH_CLOSE,100,150)
​
#sobel算子
sobelX=cv2.Sobel(MORPH_CLOSE,-1,dx=2,dy=0,ksize=5)
sobelY=cv2.Sobel(MORPH_CLOSE,-1,dx=0,dy=2,ksize=5)
#增强梯度
sobelXABS=cv2.convertScaleAbs(sobelX,1,1)#src*alpha+beta,计算绝对值,将结果转成8位
sobelYABS=cv2.convertScaleAbs(sobelY,1,1)#src*alpha+beta,计算绝对值,将结果转成8位
#x轴和y轴的梯度权重各占一半
soble=cv2.addWeighted(sobelXABS,0.5,sobelYABS,0.5,0)
​
# 6.边缘二值化处理
ret1,thresh1=cv2.threshold(Canny1,0,255,cv2.THRESH_BINARY|cv2.THRESH_OTSU)
ret2,thresh2=cv2.threshold(Canny2,0,255,cv2.THRESH_BINARY|cv2.THRESH_OTSU)
#展示最终结果
plt.subplot(231),plt.imshow(img,cmap="gray"),plt.title("img"),plt.xticks([]),plt.yticks([])
plt.subplot(232),plt.imshow(ScaleAbs,cmap="gray"),plt.title("ScaleAbs"),plt.xticks([]),plt.yticks([])
plt.subplot(233),plt.imshow(thresh1,cmap="gray"),plt.title("thresh1"),plt.xticks([]),plt.yticks([])
plt.subplot(234),plt.imshow(thresh2,cmap="gray"),plt.title("thresh2"),plt.xticks([]),plt.yticks([])
plt.subplot(235),plt.imshow(soble,cmap="gray"),plt.title("soble"),plt.xticks([]),plt.yticks([])
plt.show()

找了装甲车照片实践,效果不理想。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值