边缘检测与角点检测(模式识别与图像处理课程作业)
一、边缘检测
Sobel与Canny边缘检测代码如下所示
import cv2 as cv
import matplotlib.pyplot as plt
1.1、读取图像
读取图像的代码如下所示
# 读取图像
img = cv.imread('Lena.jpg')
lenna_img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
1.2、图像转换成灰度图像
图像转换成灰度图像的代码如下所示
# 图像转换成灰度图像
grayImage = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
1.3、Sobel算子
Sobel算子的代码如下所示
'''
Sobel算子
'''
x = cv.Sobel(grayImage, cv.CV_16S, 1, 0) # 对x求一阶导数
y = cv.Sobel(grayImage, cv.CV_16S, 0, 1) # 对y求一阶导数
absX = cv.convertScaleAbs(x)
absY = cv.convertScaleAbs(y)
Sobel = cv.addWeighted(absX, 0.5, absY, 0.5, 0)
1.4、Canny算子
Canny算子的代码如下所示
'''
Canny算子
'''
# 高斯滤波降噪
gaussian = cv.GaussianBlur(grayImage, (3, 3), 0)
# Canny算子
Canny = cv.Canny(gaussian, 50, 100)
1.5、显示正常中文的标签
显示正常中文的标签的代码如下所示
# 显示正常中文的标签
plt.rcParams['font.sans-serif'] = ['SimHei']
titles = [u'(a)原始图像', u'(b)Sobel图像', u'(c)Canny图像']
images = [lenna_img, Sobel, Canny]
for i in range(3):
plt.subplot(1, 3, i + 1), plt.imshow(images[i], 'gray')
plt.title(titles[i])
plt.xticks([]), plt.yticks([])
plt.show()
1.6、边缘检测结果
边缘检测运行结果结果如下所示
Sobel与Canny边缘检测的优缺点
- sobel: