当前位置: 首页 > 编程日记 > 正文

MFC中快速应用OpenCV(转)

转载链接:http://wiki.opencv.org.cn/index.php/MFC%E4%B8%AD%E5%BF%AB%E9%80%9F%E5%BA%94%E7%94%A8OpenCV

简介和缘起

本教程原始讨论主题,请见 【原创】MFC中快速应用OpenCV教程,制作此教程的目的,就是为了方便广大windows下面使用MFC的用户可以轻松的在MFC窗口View类中,实现OpenCV格式图片的显示。

介绍基本的openCV和MFC的操作
在MFC中如何应用菜单,和Canny算子的实例
创建SDI工程

我使用的是Visual C++ 6.0,因此,本教程描述的是在VC6上面演示操作,如果您使用别的版本的VC,我想应该也差不多。 首先,按照VC的向导,产生一个默认的MFC的工程,注意,选择SDI单文档支持的,同时最好选择“use MFC As a static library”(防止MFC中使用OpenCV的内存泄露问题) 具体请参看下面两幅图所示
Image:Mfc_opencv_01.JPG
Image:Mfc_opencv_02.JPG
就这样子一路下去之后,基本的MFC框架就创建完成了。

加入OpenCV库支持

现在加入openCV必须的头文件和库文件。如下图所示,我们添加库文件: cxcore.lib cv.lib highgui.lib 
Image:Mfc_opencv_06.JPG

在Doc类中添加变量

Image:Mfc_opencv_07.jpg
找到 ***Doc 也就是文档类的定义,在开头加上 HighGui.h 的头文件包含, 同时添加一个变量CImage m_image;

注意,如果你使用的不是VC6,按照我的教程,可能编译无法通过(我的教程中,对 m_image 是设置成 protected类型的),解决的办法是将 m_image的类型设置为public,以后建议大家都使用public修饰符。 具体的bug报告和分析请看这里:建议使用public修饰符

添加虚函数

添加两个函数,分别用来打开图片文件和保存图片文件,添加过程见下图的右键菜单。

Image:Mfc opencv 04.jpg

Image:Mfc opencv 05.jpg

分别添加函数OnOpenDocument 和 OnSaveDocument 如下面的代码

BOOL CSDI OpenCVDoc::OnOpenDocument(LPCTSTR lpszPathName){if (!CDocument::OnOpenDocument(lpszPathName)) return FALSE;// TODO: Add your specialized creation code herem_image.Load(lpszPathName);return TRUE;
}
BOOL CSDI OpenCVDoc::OnSaveDocument(LPCTSTR lpszPathName){// TODO: Add your specialized code here and/or call the base classm_image.Save(lpszPathName);return TRUE;// return CDocument::OnSaveDocument(lpszPathName);
}

注意,上面本来是 return CDocument::OnSaveDocument(lpszPathName); 但是后来发现有问题,保存了图片,会导致保存后的图片的大小变成0了,改用 return TRUE;就没有问题了,具体请看论坛的讨论:http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=4932&p=18215#p18215

在View类中添加显示图像代码

在View类中间添加必要的图片显示代码,主要是在Ondraw里面。

void CSDI_OpenCVView::OnDraw(CDC* pDC)
{CSDI_OpenCVDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCImage & img = pDoc ->m_image;CRect r;GetClientRect (&r);img.DrawToHDC(pDC->GetSafeHdc() ,r);
}

编译整个程序,就可以通过“打开菜单”打开图像并且显示在MFC的View类中了。

Image:Mfc_opencv_08.jpg

2010-12-28重要更新

由于OpenCV2.2里面,把原来的CvvImage整个类给删除掉了,因此在MFC下使用带来诸多不方便,大家可以通过提前opencv2.1中的代码的方法来解决(弄一个h文件和一个cpp文件,然后放到你的项目里面一起编译就可以了)。具体的方法和文件内容,请看: Re: OpenCV2.2里CImage(CvvImage)取消,MFC下显示图片少了个好方法

感谢和后记以及相关讨论
  1. 文档由User:Ollydbg23撰写,另外,我整理的本论坛精华区,也是以wiki的形式,放在这里论坛精华区。
  2. 如有疑问,可以去原主题下面发表回复参与讨论 【原创】MFC中快速应用OpenCV教程
  3. 关于图片太大,无法放入view里的一个解决方案,请看 feixiaolin 的帖子 opencv 数据读写操作+图像噪声+ MFC下OpenCV源代码 以及 如何插入滚动条
  4. OpenCV绘图函数DrawToHDC的一个简要解释
  5. 在opencv1.0版本中,使用上面介绍的canny的方法,存在单通道图片无法打开的错误,具体的原因请看这里,这主要是由于opencv1.0中的一个bug所导致的。原因
  6. 在opencv 1.1版本中使用,可能导致MFC的程序无法退出,解决办法请看这里 程序无法正常退出
  7. 注意,其中的 CImage 其实就是 CvvImage 这两个可以直接替换使用。
  8. OLE错误对话框的问题,请看这里 如何解决OLE的问题的论坛讨论
网络其他OpenCV资源
  • 在wxWidget GUI 界面中使用 OpenCV的示例 mango编辑器
  • 可以自动产生Opencv代码的 CvPreProcessor

转载于:https://www.cnblogs.com/mobileliker/p/4121748.html

相关文章:

liunx软件安装

RPM包 1. -qa显示当前系统中以RPM方式安装的所有软件列表。 2. -qi查看指定软件包的名称、版本、许可协议、用途描述等详细信息(--info)。 3. -ql显示指定的软件包在当前系统中安装的所有目录、文件列表(--list)。 4. -qf查看指定…

程序员因开发速度太慢而遭公司起诉,索赔金额高达90万!

作为程序员,你最头疼的事情是什么?下面这个算吗?在需求不停并更地前提下,项目还得如期上线。本文程序员因未能如期上线项目,公司直接起诉至法院,并提出90万元的索赔。一起来看看这个案件中法院是如何判决的…

c程序性能优化

一段c程序,功能开发完成,开始性能优化。当然是先用 -pg 编译,再gprof看“热点”在哪里,很快找到,是计算hash值的函数,于是换了个更快的hash函数——fnv ( http://isthe.com /chongo/tech/comp/fnv/)&#x…

struts2上传图片的全过程

转载自&#xff1a;http://blog.sina.com.cn/s/blog_6608320c0100j6no.html1、写一个上传的jsp页面upload_p_w_picpath.jsp,内容如下&#xff1a;<body><center> <font color"red"><s:fielderror/></font> <s:form actio…

Java中 与,||与|的区别

阅读目录 区别短路运算举例回到顶部区别 && || 是逻辑运算&#xff0c;支持短路运算 & | 是位运算&#xff0c;不支持短路运算 回到顶部短路运算 当有多个表达式时,左边的表达式值可以确定结果时,就再继续运算右边的表达式的值; 回到顶部举例 例1 Testpublic void…

保持dropdownlist选中值

RowDataBound事件 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { int i; for (i 0; i < GridView1.Rows.Count; i) { if (e.Row.RowType DataControlRowType.DataRow) { e.Row.Attributes.Ad…

js判断鼠标位置是否在某个div中

div的onmouseout事件让div消失时&#xff0c;会出现这样的情况&#xff0c;就是当鼠标移至div中的其它内容时&#xff0c;此时也判定为离开div&#xff0c;会触发 onmouseout事件&#xff0c;这样div中的内容就不能操作了。解决的办法是当触发onmouseout事件时&#xff0c;先判…

奉劝程序员们:写再多代码,还不如提升这两大能力有价值!

哪个国家的程序员水平最高&#xff1f;软件工程师水平测定平台HackRank发起了一系列编程挑战竞赛&#xff0c;给出了一份出乎意料的数据。据悉&#xff0c;这份数据研究分析了HackerRank社区里30万名开发者完成的140万项编码挑战。最终的结果显示中国程序员排在了第一位&#x…

IBM Thinkpad T43-44U 升级到 2G 内存后少了 66M

背景前段时间把 T43-44U 升级到 2G 内存&#xff0c;可以升级后&#xff0c;内存显示总是 1982M&#xff0c;少了 66M。奇怪之极&#xff0c;怎么搞都没搞好。有的热心网友建议重新刷 BIOS&#xff0c;升级到联想刚发布的 1.26 版。可是刷 BIOS 危险系数太高&#xff0c;俺是万…

Linux下的ATT语法(即GNU as 汇编语法)入门

学习这么长时间&#xff0c;一直在C语言这一层面上钻研和打拼&#xff0c;日积月累&#xff0c;很多关于C的疑惑在书本和资料中都难以找到答案。程序员是追求完美的一个种群&#xff0c;其头 脑中哪怕是存在一点点的思维黑洞都会让其坐卧不宁。不久前在itput论坛上偶得《Comput…

汽车高级驾驶辅助系统ADAS激光雷达创新者Cepton与Growth Capital达成企业合并协议

汽车高级驾驶辅助系统 (ADAS) 和车辆自动驾驶领域光感测距技术&#xff08;激光雷达&#xff09;的创新者Cepton Technologies, Inc.&#xff08;以下简称“Cepton”&#xff09;将与Growth Capital Acquisition Corp.&#xff08;以下简称“Growth Capital”&#xff0c;纳斯达…

通过Navicat for MySQL远程连接的时候报错mysql 1130的解决方法

在用本地的navicat连接服务器的mysql数据库时候出现下面的问题&#xff1a; 解决的方法&#xff1a; 解决方法&#xff1a; 1、改表法。可能是你的帐号不允许从远程登陆&#xff0c;只能在localhost。这个时候只要在localhost的那台电脑&#xff0c;登入mysql后&#xff0c;更改…

17张图揭密支付宝系统架构

支付宝的系统架构图&#xff0c;仅供参考。不管是不是支付行业&#xff0c;都值得我们参考&#xff0c;学习。 imageimageimageimageimageimageimageimageimageimageimageimageimageimageimageimageimage推荐阅读 阿里高级Java面试题&#xff08;首发&#xff0c;70道&#xff…

Facebook性能大提升的秘密:HipHop

facebook / hiphop-php https://github.com/facebook/hiphop-php Facebook神秘的PHP项目HipHop for PHP终于揭开面纱。这个项目由一个PHP到C的转换程序&#xff0c;一个重新实现的PHP运行库&#xff0c;和许多常用PHP扩展的重写版本构成&#xff0c;目的是旨在加速和优化PHP…

Android必备:Android的体系结构

2019独角兽企业重金招聘Python工程师标准>>> 链接地址&#xff1a;http://www.xx566.com/detail/107.html 最近一个月接触Android&#xff0c;开始做一些app的开发&#xff0c;通过参考网络上的资料&#xff0c;阅读Android相关的书籍&#xff0c;从无知到了解&…

豆瓣评分 9.4 的算法巨著,这本书带无数读者入门算法

说到算法巨著&#xff0c;你可能想到的是《算法导论》这本经典。但在入门算法时&#xff0c;还有一本与之比肩的巨著&#xff0c;不得不提&#xff0c;它就是《算法&#xff08;第4版&#xff09;》。这本豆瓣评分 9.4 的算法巨著&#xff0c;可谓是算法经典好书&#xff0c;给…

zabbix企业应用之监控oracle

本次介绍如何使用zabbix监控oracle&#xff0c;主要使用pyora这个python脚本来监控&#xff0c;具体地址可以参考https://github.com/bicofino/Pyora 我的zabbix版本为2.0.6&#xff0c;oracle为11g 下面是部分效果图 1、Oracle/Active user count 2、Oracle/Bytes sent and re…

ZendFramework的介绍、安装和实例运行

框架主要是为了提高开发效率、使得团队开发人员之间的更容易沟通和协作以及提高应用程序的可维护性。学习了解一种或多种框架对实际项目的应用会有所帮助。一、ZendFramework 的介绍&#xff1a;ZendFramework(以下简称&#xff1a;ZF)&#xff0c;以 Model-View-Controller(MV…

input type=hidden /在IE中占空间(转)

input 的 type 设为 hidden 的话&#xff0c;就是隐藏域&#xff08;废话&#xff09;。隐藏域在页面中不显示&#xff0c;但可以有值。既然是“隐藏”的&#xff0c;怎么还说会占空间呢。这是 IE 的 bug&#xff0c;不过这个 bug 的出现需要一定的条件&#xff0c;换句话说就是…

网友:Java岗,自学一个月跳槽计算机视觉,其实入门很简单

笔者在脉脉上看到一条帖子&#xff1a;原来Java岗&#xff0c;自学一个月成功跳槽视觉算法岗。这已经不是笔者第一次看到转行成功的程序员案例了&#xff0c;而大家的跳槽动机基本上都离不开&#xff0c;发展趋势、岗位高薪、职业兴趣。计算机视觉行业真相&#xff1a;竞争压力…

MapReduce对交易日志进行排序的Demo(MR的二次排序)

1.日志源文件 (各个列分别是: 账户,营业额,花费,日期) zhangsan163.com 6000 0 2014-02-20 lisi163.com 2000 0 2014-02-20 lisi163.com 0 100 2014-02-20 zhangsan163.com 3000 0 2014-02-20 wangwu126.com 9000 0 2014-02-20 w…

HTTP中Get与Post的区别

Http定义了与服务器交互的不同方法&#xff0c;最基本的方法有4种&#xff0c;分别是GET&#xff0c;POST&#xff0c;PUT&#xff0c;DELETE。URL全称是资源描述符&#xff0c;我们可以这样认 为&#xff1a;一个URL地址&#xff0c;它用于描述一个网络上的资源&#xff0c;而…

sdut AOE网上的关键路径(spfa+前向星)

http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid2498&cid1304 题目描述 一个无环的有向图称为无环图&#xff08;Directed Acyclic Graph&#xff09;&#xff0c;简称DAG图。 AOE(Activity On Edge)网&#xff1a;顾名思义&#xff0c;用边表示活动的网&#xff…

苹果新功能惹网友众怒,还有隐私可言吗?

编译 | 禾木木出品 | AI科技大本营(ID:rgznai100)大部分人选择 iPhone 的一大理由就是信息安全&#xff0c;这家公司对于个人隐私的保护一直为人称赞。最近苹果公司宣布&#xff0c;为了让儿童能够更加安全地上网&#xff0c;他们决定在iOS 15、iPADOS 15、macOS Monterey系统中…

让Ubuntu拥有SUSE一样的GRUB启动界面

SUSE的漂亮大家可能都见识过&#xff0c;尤其是那个Grub启动画面。我身边的朋友为了在自己的系统上也能使用SUSE的GRUB启动画面&#xff0c;用了一种原理比较简 单&#xff0c;过程比较白痴的方法&#xff1a;先安装SUSE&#xff0c;把/boot单独分区&#xff0c;然后把除了/boo…

计算机编程简史图

计算机编程简史图www.21kaiyun.com 21世纪开运网 算准你每天的桃花运 帮忙推广下我的网站 谢谢

HTML5 模板推荐

http://www.yundic.com/转载于:https://www.cnblogs.com/lsl8966/p/4133484.html

Windows 11 再惹“众怒”!网友:微软就是逼我去买新电脑!

整理 | 郑丽媛出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;一般来说&#xff0c;不论是移动还是桌面操作系统&#xff0c;如若要升级版本&#xff0c;大多用户都不会产生过大的抵触情绪&#xff0c;毕竟更新往往都是为了确保用户获得最佳体验。但近来用户对微软…

刚学习了linux的DHCP 配置.呵呵.自己上来总结下.

先来看DHCP的工作原理.DHCP (Dynamic Host Configuration Protocol)下面的部分是google找的....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~DHCP来自ITwiki&#xff0c;开放的信息技术大百科DHCP是Dynamic Host Configuration Protocol的…

App_Offline.htm 一个静态页面实现整站维护时统一页面

在ASP.NET 2.0 站点根目录下&#xff0c;只要存在 App_Offline.htm 文件&#xff0c;那么所有对.aspx的请求都将转向App_Offline.htm 。而且浏览器的地址栏显示的是所请求的.aspx的URL。 这样当我们的站点需要维护时&#xff0c;只要把App_Offline.htm 拷贝到站点根目录下即…