Canny边缘检测Demo——基于Opencv4.10和MFC【计算机视觉课程作业】

本文介绍了一款基于MFC和OpenCV的Canny边缘检测软件,详细解释了软件功能及其实现过程。用户可通过调整阈值参数进行图像边缘检测,并查看不同阶段的处理结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

作业要求使用c/c++编写涉及课堂知识点,能实现一定功能的代码,并发布为可执行程序,在其他电脑上时运行时无需安装相关库。所以我用MFC和OpenCV写了一个小demo实现Canny边缘检测,通过静态编译满足程序通用性要求。

完整项目代码地址:https://github.com/liuzwin98/CannyEdgeDetectionDemo

正文

软件说明

1、概述: CannyDetection_demo.exe。软件开发基于OpenCV和MFC,开发环境为VS2017,其中Canny算法部分为手动实现。算法代码在source目录下的mfc_demoDlg.cpp文件中。
2、软件功能: 打开并读取指定目录下的图片文件,用户可自己设置不同的Canny算法阈值参数,通过点击不同的功能按键,可以得到图像处理的中间结果,如高斯模糊、梯度幅值、非极大值抑制(NMS)图像,还能一键保存当前的所有图像到当前软件目录。
3、使用方法: 打开图片文件->设置两个阈值,点击确定->点击不同的功能按键得到相应的图像->重新设置阈值得到不同的检测结果。

在这里插入图片描述

实验结果

打开图片文件,并设置高低阈值参数分别为60、100,得到Canny检测结果和中间结果如图2.1,2.2,2.3,2.4所示。

在这里插入图片描述

图2.1-2.4 中间结果即检测结果

设置高低阈值分别为10、40,Canny检测结果如图2.5所示。高低阈值分别为100、200时,结果如图2.6所示。
在这里插入图片描述
在这里插入图片描述

通过实验结果可知,高低阈值都为一个较小的值时,边缘与背景不能很好的区分开;而高低阈值都为一个较大的值时,轮廓边缘不再连续,检测效果较差。小阈值用来调控边缘连接,大阈值用来控制强边缘的初始分割。

附录

OpenCV静态编译所需添加的库目录:

IlmImf.lib
ittnotify.lib
libjasper.lib
libjpeg-turbo.lib
libpng.lib
libprotobuf.lib
libtiff.lib
libwebp.lib
opencv_calib3d410.lib
opencv_core410.lib
opencv_dnn410.lib
opencv_features2d410.lib
opencv_flann410.lib
opencv_highgui410.lib
opencv_imgcodecs410.lib
opencv_imgproc410.lib
opencv_ml410.lib
opencv_objdetect410.lib
opencv_photo410.lib
opencv_stitching410.lib
opencv_video410.lib
opencv_videoio410.lib
quirc.lib
zlib.lib

参考

Canny算法
https://www.jianshu.com/p/d21a33a7901a
https://github.com/Nhat-Thanh/Canny-Algorithm

静态编译Opencv与MFC
https://blog.youkuaiyun.com/scarletteshu/article/details/106848576
https://blog.youkuaiyun.com/jiao_mrswang/article/details/100140140

MFC显示Opencv图片
https://blog.youkuaiyun.com/juluwangriyue/article/details/108886191

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值