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)运行后,正常

 


 

posted on 2012-04-23 09:26  黄玮璘  阅读(2491)  评论(0编辑  收藏  举报

导航