VC++2008中快速运用OpenCV打开图像文档
【问题的提出】
在VC++2008中,希望能够通过建立MFC应用程序来调用OpenCV中的函数,来打开图像文件。
【问题的解决】
完整的带图文档,我放在这个位置:
http://download.csdn.net/detail/huanghanyu11/4248406
(1)在VC++界面中,创建项目
(2)选择MFC应用程序,命名为test_MFC
(3)进入MFC应用程序向导,概述界面中了解一下信息,略过,下一步
(4)在MFC应用程序向导中,应用程序类型界面中
选择:
单个文档,MFC标准,视觉样式和颜色选择Widows本机/默认
默认勾选了使用Unicode库
下一步
(5)在MFC应用程序向导中,复合文档支持界面中
默认:无
下一步
(6)文档模板字符串界面中,默认自动生成的字符串,
修改主题框架标题名为:MFC下实现OpenCV
下一步
(7)数据库支持界面,默认:无
下一步
(8)用户界面功能界面中,默认自动勾选的,
之后将命令栏勾点使用经典菜单
下一步
(9)在高级功能界面中,把默认勾选的ActiveX控件的勾去掉
下一步
(10)在生成的类的界面中,默认自动生成的名称
完成。
(11)在解决方案中的项目名test_MFC的右键点击属性
对属性页进行对“活动(Debug)”和“release”配置操作,
在“配置属性”下的“链接器”下的“输入”中添加依赖项,
点击“…”,即进入编辑框,分行输入cxcore200d.lib、cv200d.lib和highgui200d.lib
(12)进入类视图,点击类名Ctest_MFCDoc,
在类Ctest_MFCDoc的首行添加#include "highgui.h"
在类Ctest_MFCDoc中声明受保护的变量:CImage m_image;
为类Ctest_MFCDoc添加重写函数OnOpenDocument
函数代码:
BOOL Ctest_MFCDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
// TODO: 在此添加您专用的创建代码
m_image.Load(lpszPathName);
return TRUE;
}
为类Ctest_MFCDoc添加重写函数OnSaveDocument
函数代码:
BOOL Ctest_MFCDoc::OnSaveDocument(LPCTSTR lpszPathName)
{
// TODO: 在此添加专用代码和/或调用基类
m_image.Save(lpszPathName);
return TRUE;
//return CDocument::OnSaveDocument(lpszPathName);
}
(13)进入类视图,点击类名Ctest_MFCView
找到已经存在的默认的重写函数OnDraw
添加代码如下:
void Ctest_MFCView::OnDraw(CDC* pDC)
{
Ctest_MFCDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
CImage & img = pDoc ->m_image;
CRect r;
GetClientRect (&r);
img.DrawToHDC(pDC->GetSafeHdc() ,r);
}
(14)运行后报错:
1>f:\documents and settings\administrator\my documents\visual studio 2008\projects\test_mfc\test_mfc\test_mfcdoc.cpp(87) : error C2664: “CvvImage::Load”: 不能将参数从“LPCTSTR”转换为“const char *”
1> 与指向的类型无关;转换要求reinterpret_cast、C 样式转换或函数样式转换
1>f:\documents and settings\administrator\my documents\visual studio 2008\projects\test_mfc\test_mfc\test_mfcdoc.cpp(95) : error C2664: “CvvImage::Save”: 不能将参数从“LPCTSTR”转换为“const char *”
1> 与指向的类型无关;转换要求reinterpret_cast、C 样式转换或函数样式转换
1>test_MFCView.cpp
1>f:\documents and settings\administrator\my documents\visual studio 2008\projects\test_mfc\test_mfc\test_mfcview.cpp(60) : error C2065: “pDC”: 未声明的标识符
1>f:\documents and settings\administrator\my documents\visual studio 2008\projects\test_mfc\test_mfc\test_mfcview.cpp(60) : error C2227: “->GetSafeHdc”的左边必须指向类/结构/联合/泛型类型
(15)寻找出错原因:
1.“CvvImage::Load”: 不能将参数从“LPCTSTR”转换为“const char *”:使用了字符集unicode,所以有这个错误
2.“CvvImage::Save”: 不能将参数从“LPCTSTR”转换为“const char *”:使用了字符集unicode,所以有这个错误
3.“pDC”: 未声明的标识符:void Ctest_MFCView::OnDraw(CDC* /*pDC*/)中的输入参数pDC被注释掉,需要把注释符去掉
4.“->GetSafeHdc”的左边必须指向类/结构/联合/泛型类型:void Ctest_MFCView::OnDraw(CDC* /*pDC*/)中的输入参数pDC被注释掉,需要把注释符去掉
(16)运行后,正常