vs2010 + opencv用自定义工具打开图片并显示

来源:互联网 发布:十二宫杀手解析知乎 编辑:程序博客网 时间:2024/09/21 06:36

步骤

一、新建项目

       单击菜单栏的文件->新建->项目

            选择Visual C++,MFC应用程序,名称为CSDN_demo,选择好路径,然后单击“确定”


          再单击“下一步”。此时,按照下图来选择各个项。

          选择“基于对话框”、不使用Unicode库,选择“在静态库中使用MFC”,单击“完成”。


           完成后,会出现一个编辑对话框的界面。

二、配置OpenCV环境

               由于本人之前配置过环境,而且过程繁琐,因此,这里就不再重复。详细过程参考:http://blog.csdn.net/liuqinglong110/article/details/30051219

       (当然有些人的做法是:在项目属性中加载lib文件:菜单 项目->属性-> 配置属性-> 链接器–>输入-> 附加依赖库中加入 cxcore200.lib  cv200.lib highgui200.lib这三个库。           然后在 mymfc.h 的 #include "resource.h" 下加入如下代码:#include “cv.h”   #include “highgui.h”。注意:用英文分号隔开。这种方法的有效性,本人并没有亲自验证过。         转自:http://blog.csdn.net/aaahuanian/article/details/8027210)

三、添加和设置控件

         在菜单栏中,视图->工具箱,此时就打开了控件的工具箱。选择工具箱中的Button控件,并将其拖到对话框相应的位置。


          右击Button控件,选择属性,将其Caption改为OpenImg。

           添加Picture Control控件到对话框的相应位置,并调整控件的大小。


          右击Picture Control控件,选择属性,打开控件属性对话框,如下图,保持ID属性不变,修改Type属性为Rectangle。

          现在为按钮添加处理程序,右击OpenImg按钮,选择“添加事件处理程序”,此时出现向导界面。消息类型选择BN_CLICKED,类列表选择CCSDN_deomDlg,函数处理             程序名选择OnBnClickedOpenImg,单击“添加编辑”。

四、添加OpenCV旧版本中的CvvImage.h和CvvImage.cpp文件

           如首先添加CvvImage.h,则右击解决资源方案管理器中的“头文件”-> “添加”->” CvvImage.h”


           然后再用类似的方式,在“源文件”的文件夹下添加“CvvImage.cpp”。

          注意:CvvImage.h和CvvImage.cpp这两个文件要和本项目中的其他cpp文件等放在同一个文件夹中。

五、添加代码

         在解决方案管理器中双击打开CSDN_demoDlg.h.

        在#pragma once的下一行添加如下代码:

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

注意:若"CvvImage.h"不在工程的包含目录中,则需要写成完整路径,并且“\”要写成“\\”,如:F:\\CvvImage。建议还是放在工程的包含目录中,这样使用相对路径可以避免一些不必要的麻烦。(这三行代码应该)

 

在CSDN_demoDlg.h文件中CSDN_demoDlg类的声明中添加函数DrawPicToHDC()的声明:void DrawPicToHDC(IplImage *img, UINT ID);。

(其实这个函数名DrawPicToHDC()不是固定的,只要函数声明和定义的名称一致就可以了。)

        在CSDN_demoDlg.cpp中添加DrawPicToHDC()的函数定义:

void CCSDN_demoDlg::DrawPicToHDC(IplImage *img, UINT ID){CDC *pDC = GetDlgItem(ID)->GetDC();HDC hDC= pDC->GetSafeHdc();CRect rect;GetDlgItem(ID)->GetClientRect(&rect);CvvImage cimg;cimg.CopyOf( img ); // 复制图片cimg.DrawToHDC( hDC, &rect ); //将图片显示到图片控件指定区域内。ReleaseDC( pDC );}

在按钮OpenImg的响应函数中添加代码:

void CCSDN_demoDlg::OnBnClickedOpenImg(){ IplImage *image=NULL; //原始图片if(image) cvReleaseImage(&image);CFileDialog dlg(                   TRUE,_T("*.bmp"), NULL,                   OFN_FILEMUSTEXIST| OFN_PATHMUSTEXIST | OFN_HIDEREADONLY,                   _T("imagefiles (*.bmp; *.jpg) |*.bmp; *.jpg; *.jpeg | All Files (*.*) |*.*||"),NULL                   );                                                                                 //选项图片的约定。         dlg.m_ofn.lpstrTitle= _T("打开图片");  //打开文件对话框的标题吗         if(dlg.DoModal() != IDOK )                                            //判断是否获得图片                   return;         CStringmPath = dlg.GetPathName();                        //获取图片路径         IplImage*ipl = cvLoadImage( mPath, 1 );       //读取图片、缓存到一个局部变量ipl中         if(!ipl )                                                                                //判断是否成功读取图片                   return;         ShowImage(ipl,IDC_STATIC);                    // 调用显示图片函数         cvReleaseImage(&ipl );                                                 //释放ipl占用的内存 }


六、运行

0 0
原创粉丝点击