python+opencv入门-canny 边缘检测
任务描述
参考文章
https://www.educoder.net/shixuns/2pwliuxy/challenges 本关任务:使用 OpenCV 实现图片边缘检测方法,并对图片进行边缘检测。
相关知识
为了完成本关任务,你需要掌握:
1 . 什么是边缘检测;
2 . 使用 OpenCV 实现图片边缘检测方法。
什么是边缘检测
边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。图像属性中的显著变化通常反映了属性的重要事件和变化。如下图:
常用的边缘检测模板有 Laplacian 算子、Roberts 算子、Sobel 算子、 Kirsch 算子和 Prewitt 算子等。在这里简单介绍下 canny 边缘检测,大概分为以下五个步骤:
1.使用高斯滤波器,以平滑图像,滤除噪声。
2.计算图像中每个像素点的梯度强度和方向。
3.应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。
4.应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
5.通过抑制孤立的弱边缘最终完成边缘检测。
使用OpenCV实现图片边缘检测方法
import cv2
#加载灰度图片
img = cv2.imread(img_path,0)
#进行canny边缘检测
canny_edg=cv2.Canny(img,50,150)
#保存处理后的图片
cv2.imwrite(save_path,canny_edg)
其中 cv2.imread() 为加载图片方法,0 表示加载灰度图片。cv2.Canny() 为 canny 边缘检测方法,img 为所检测图片。
最后将处理后的图片保存,save_path 为保存路径。
编程要求
根据提示,在右侧编辑器的 begin-end 间补充代码,实现边缘检测方法,并对图片进行边缘检测。
测试说明
程序会使用你实现的方法对图片进行边缘检测,若检测结果与正确结果差异在阈值内则视为通关。
#encoding=utf8
import cv2
def canny_edg(img_path,save_path):
''' img_path:图片储存路径
save_path:图片保存路径
img:处理后的图片 '''
#********* Begin *********#
#加载灰度图片
img = cv2.imread(img_path,0)
#进行canny边缘检测
#补全代码!!
#保存处理后的图片
cv2.imwrite(save_path,canny_edg)
#********* End *********#
return img
+++++++++++++++++++++++++answer++++++++++++++++++++++++++++++++