Opencv2.2版本以上CvvImage类的使用

博客介绍了如何在OpenCV2.2及以上版本的MFC应用中使用CvvImage类。由于新版本不再包含此类,作者通过复制旧版本的头文件和源文件来解决这个问题,从而在picture控件中显示图像。
摘要由CSDN通过智能技术生成

前段时间一直在学习opencv,但学习过程中写的例子都是基于控制台的。今天打算把之前写的一些例子都移植到


MFC中,基本上就是复制以前的代码,唯一的区别在于在控制台中,显示图像是先创建一个窗口,然后在窗口中


显示图像,然而在MFC中,一般是将图像显示在一个picture控件中,这样就得用到CvvImage类啦,但是这里有一


个问题,那就是Opencv2.2以上版本不再包含CvvImage类了,这样的话我们就不能使用这个类了,如果自己写代


码实现这个功能,就得用纯API自己实现啦,这样就比较蛋疼了。后来然后想到了之前做程序启动画面时要用到一


个splash控件,但同样的VS2010已经没有了对这个控件的支持,当时就在网上搜了下解决方案,基本都是把以前


VC6.0中splash控件的类的头文件和源文件直接复制过来就可以了,于是这里也打算 这样解决。人品真好,百度一


下就马上找到了,这个问题也就解决啦!!!


/*头文件 CvvImage.h*/

#pragma once
#ifndef CVVIMAGE_CLASS_DEF
#define CVVIMAGE_CLASS_DEF

#include "cv.h"
#include "highgui.h"

/* CvvImage class definition */
class  CvvIm
【目的】 1、了解OpenCVMFC框架使用,建立基于VC + OpenCV的图像处理平台; 2、在此基础上实现简单的图像处理操作,包括图像的打开、显示、放大、缩小、保存。 【版本】 VC2008 + opencv 2.3.1 【详细实现步骤】 1、VC2008编译环境设置:工程已预先设好,为保证能编译成功,自己需重新设置(include/lib/bin路径,略。。。); 2、视图显示选择OpenCV老式显示方法CvvImage,将CvvImage文件夹下两个文件加入工程,stdafx.h加入【#include "CvvImage/CvvImage.h"】 3、CMFC_OpenCVDoc文档加入变量: Mat m_originImage;//原始图像 Mat m_Image;//间处理图像 4、重载虚函数OnOpenDocument函数,代码如下: BOOL CMFC_OpenCVDoc::OnOpenDocument(LPCTSTR lpszPathName) { if (!CDocument::OnOpenDocument(lpszPathName)) return FALSE; //使用Mat矩阵读取图像数据 m_originImage = imread((char*)lpszPathName); //原始数据留存,数据操作在m_Image上进行 m_originImage.copyTo(m_Image); return TRUE; } 5、重载虚函数OnSaveDocument,代码如下: BOOL CMFC_OpenCVDoc::OnSaveDocument(LPCTSTR lpszPathName) { if (!m_Image.empty()) { imwrite((char*)lpszPathName, m_Image); } return TRUE; } 6、视图CMFC_OpenCVView加入变量: CImage m_showImage;//图像显示变量 7、视图CMFC_OpenCVViewOnDraw函数改写如下: void CMFC_OpenCVView::OnDraw(CDC* pDC) { CMFC_OpenCVDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; if (pDoc->m_Image.empty()) { return; } //获取需要显示的图像 IplImage* piI = &(pDoc->m_Image.operator IplImage()); //转化为合适显示的型 m_showImage.CopyOf( piI ); //获取显示设备窗口 CRect rect; GetClientRect(▭); //把显示区的宽度设为图像的真实宽度和高度 rect.right=m_showImage.Width(); //CvvImage:Width()计算图像的宽度,单位像素 rect.bottom=m_showImage.Height();//CvvImage:Height()计算图像的高度,单位像素 //定义一个CSize对象,用于保存滚动条的尺寸,设为图像的真实尺寸 CSize sizeTotal(rect.right,rect.bottom); SetScrollSizes(MM_TEXT, sizeTotal);//设置滚动条的位置 //调用CvvImage的成员函数DrawToHDC在视图窗口显示图像 //函数形参为当前的设备环境和显示区大小 m_showImage.DrawToHDC(pDC->GetSafeHdc(),rect); } 8、滚动条显示设置: 视图CMFC_OpenCVView需继承于CScrollView,而不是CView,需要改动的地方还有,将以下语句 IMPLEMENT_DYNCREATE(CMFC_OpenCVView, CView) BEGIN_MESSAGE_MAP(CMFC_OpenCVView, CView) 改为: IMPLEMENT_DYNCREATE(CMFC_OpenCVView, CScrollView) BEGIN_MESSAGE_MAP(CMFC_OpenCVView, CScrollView); 另外,初始化时重载OnInitialUpdate函数如下: void CMFC_OpenCVView::OnInitialUpdate() { CScrollView::OnInitialUpdate(); // TODO: 在此添加专用代码和/或调用基 CSize sizeTotal; sizeTotal.cx = sizeTotal.cy = 60; SetScrollSizes(MM_TEXT, sizeTotal); }
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值