Python+OpenCV图像处理之边缘提取

一、简介

在图像处理中,边缘提取是一种基础的图像处理算法,常用于图像识别以及跟踪领域,为进一步分析和理解图像做准备,下面介绍两种不同的图像边缘检测方法。

二、边缘检测方法

本文介绍的边缘检测方法包括直接使用高斯滤波器检测和Canny边缘检测两种方法。

1.高斯滤波器提取边缘特征

高斯滤波是一种线性平滑滤波,可以用于消除图像中的高斯噪声。简言之,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。下面用代码显示一下处理效果:

import cv2
img = cv2.imread("gaosi.jpg",0)
blurred = cv2.GaussianBlur(img,(11,11),0) #高斯矩阵的长与宽都是11,标准差为0
gaussImg = img - blurred
cv2.imshow("Image",gaussImg)
cv2.waitKey(0)

原图:

处理后:
在这里插入图片描述

2.Canny边缘特征提取

Canny边缘检测是一种非常流行的边缘检测算法,是由John F.Canny 在1986 年提出的,Canny边缘检测算法被很多人推崇为当今最优秀的边缘检测算法,关键步骤有两步,即图像去噪和设置阈值来确定边界。
图像去噪:由于边缘检测很容易受到噪声的影响,所以首先要使用高斯滤波器来去除噪声;
设置阈值:对于边界的确定需要我们来设置两个阈值,minv和maxv,当图像的灰度梯度高于maxv时,被认定为真的边界,图像的灰度小于minv时,则被舍弃,倘若灰度梯度介于两者之间,要看这个点是否与某个被认定为真的边界点相连,如果是,就被认为是真的边界点,反之则舍弃。如下图所示,A点高于阈值maxv,所以直接被认定真的边界点,B点和C点虽然都介于minv和maxv之间,但是C点与A点相连,所以也被看作是边界点,B点不与边界点相连,所以被舍弃。
在这里插入图片描述

下面是Canny边缘检测代码:

import cv2
img = cv2.imread("z2.jpg",0)
blurred = cv2.GaussianBlur(img,(11,11),0)
gaussImg = cv2.Canny(blurred, 10, 70)
cv2.imshow("Img",gaussImg)
cv2.waitKey(0)

原图:
在这里插入图片描述
处理后:
在这里插入图片描述
以上就是文章的所有内容,如果本文对你有帮助,可以给我点个赞,加个关注,谢谢!

原创文章 9 获赞 9 访问量 1303

猜你喜欢

转载自blog.csdn.net/weixin_42709563/article/details/105700972