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

文章目录

  • 前言
  • 正文
    • 软件说明
    • 实验结果
  • 附录
  • 参考

前言

作业要求使用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、使用方法: 打开图片文件->设置两个阈值,点击确定->点击不同的功能按键得到相应的图像->重新设置阈值得到不同的检测结果。

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

实验结果

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

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

Canny边缘检测Demo——基于Opencv4.10和MFC【计算机视觉课程作业】_第3张图片 Canny边缘检测Demo——基于Opencv4.10和MFC【计算机视觉课程作业】_第4张图片
Canny边缘检测Demo——基于Opencv4.10和MFC【计算机视觉课程作业】_第5张图片 Canny边缘检测Demo——基于Opencv4.10和MFC【计算机视觉课程作业】_第6张图片
图2.1-2.4 中间结果即检测结果

设置高低阈值分别为10、40,Canny检测结果如图2.5所示。高低阈值分别为100、200时,结果如图2.6所示。
Canny边缘检测Demo——基于Opencv4.10和MFC【计算机视觉课程作业】_第7张图片
Canny边缘检测Demo——基于Opencv4.10和MFC【计算机视觉课程作业】_第8张图片

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

附录

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.csdn.net/scarletteshu/article/details/106848576
https://blog.csdn.net/jiao_mrswang/article/details/100140140

MFC显示Opencv图片
https://blog.csdn.net/juluwangriyue/article/details/108886191

你可能感兴趣的:(学习成长,计算机视觉,opencv,mfc,图像处理,边缘检测)