zoukankan      html  css  js  c++  java
  • MFC-----在MFC中使用Picture控件加载任意图片

    对于刚刚接触OpenCV的童鞋来说,如何在MFC中加载并显示一张图片、应该是初期必定会碰到的问题之一。因此本文在分享这方面经验的同时,也相当于是写给自己的一份备忘录。

      本文使用的是OpenCV2.1+VS2008(当然,就本文所述内容而言,支持所有版本OpencCV),至于opencv在VS中的配置方法,本文不作详述。

      开门见山,本文核心思路是:使用OpenCV的库函数加载图片,并调用ShowImage()函数将其显示到Picture控件上。

      操作步骤如下:

      1. 新建一个基于对话框的MFC程序(姑且命名为myImage),并添加一个Picture控件到对话框中,修改ID号为:IDC_STATIC_PIC。为使Picture控件更美观,可将其属性设置为:Client Edge:True。

      2. 添加按钮,可命名为“加载图像”,修改ID号为ID_BUTTON_IMG。双击按钮,跳到myImageDlg.cpp文件,开始编辑按钮消息响应函数。该按钮功能为加载图片并显示到Picture控件上。

      void CmyPointerRecognitionDlg::OnBnClickedButtonDetect()

      {
       // TODO: Add your control notification handler code here 

      CString m_strPicPath;

      IplImage* TheImage;

      CFileDialog dlg(true,_T("*.bmp"),NULL,OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY,
                _T("image file(*.bmp;*.jpg)|*.bmp;*.jpg|All Files(*.*)|*.*|"),NULL);  //弹出选择图片对话框
      dlg.m_ofn.lpstrTitle=_T("open Image");
       if(dlg.DoModal()!=IDOK)
          return ;
       m_strPicPath = dlg.GetPathName();
       m_strPicPath.Replace(_T("//"),_T("////"));
       TheImage=cvLoadImage((CT2CA)m_strPicPath,1);
       if(TheImage!=NULL)
       {
          ShowImage(TheImage, IDC_STATIC_PIC);
         }

      }

      3. 注意在myImage.cpp和myImage.h中添加头文件:#include<cv.h>和#include<highgui.h> 为方便编程最好加上:using namespace cv;

      4. 在解决方案的类视图(Class View)中右键单击CmyImageDlg类,选择“添加”->“添加成员函数”,在弹出的对话框中输入相应内容 函数类型:void,函数名:ShowImage ,成员变量:IplImage* img 和 UINT ID。点击“完成”,开始编辑函数体:

      void CmyImageDlg::ShowImage(IplImage* img, UINT ID)
      {

      CDC* pDC=GetDlgItem(ID)->GetDC();
       HDC hDC=pDC->GetSafeHdc();
       CRect rect;
       GetDlgItem(ID)->GetClientRect(&rect);
       SetRect(rect,rect.left,rect.top,rect.right,rect.bottom);
       CvvImage cimg;
       cimg.CopyOf(img);
       cimg.DrawToHDC(hDC,&rect);
       ReleaseDC(pDC);
      

      }

      5. Ctrl+F5,编译运行,即可实现预期效果。

  • 相关阅读:
    [转]xna 3.1 to xna 4.0
    office 2010 激活信息查看
    Windows 8 Release Preview下载地址
    常用书籍推荐与下载地址
    禁用Windows7脱机文件的方法
    [转]DEM数据和影像数据下载汇总
    打工是最愚蠢的投资——李嘉诚在深圳大梅沙演讲
    j截图Code
    BYTE与_int64转换
    英语中of和for用法有什么区别?
  • 原文地址:https://www.cnblogs.com/yssongest/p/3413186.html
Copyright © 2011-2022 走看看