对于刚刚接触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,编译运行,即可实现预期效果。

MFC-----在MFC中使用Picture控件加载任意图片的更多相关文章

  1. MFC Picture控件加载图片

    CStatic *pPic = (CStatic*)GetDlgItem(IDC_PICTURE); CBitmap bitmap; bitmap.LoadBitmapW(IDB_BITMAP2); ...

  2. C#中的WebBrowser控件加载ActiveX插件

    C#中WebBrowser控件,将项目输入更改为x86输出,在页面打开时即可自动加载ActiveX控件

  3. C#窗体加载和控件加载不同步导致控件闪烁

    窗体加载和控件加载不同步导致的控件闪烁现象:// 代码块加在父窗体中的任意位置,解决窗体加载和控件加载不同步导致的控件闪烁问题        protected override CreatePara ...

  4. 关于4A网络安全管控平台控件加载失败的解决方法

    最近电脑重装系统后,到公司登录4A管控平台提示"控件加载失败","无效的参数为:Null","点击资源无任何反映"等等问题 别人的电脑用的好 ...

  5. paip.gui控件tabs控件加载内容的原理以及easyui最佳实现

    paip.gui控件tabs控件加载内容的原理以及easyui最佳实现 //////////////tabs控件的加载 同form窗体一样,俩个方式 两个方式:一个是url,简单的文本可以使用这个,不 ...

  6. C#拖曳控件加载,bll报错问题

    C#拖曳控件加载,bll报错问题,加载时实例如化bll时加上一个判断 if (!(GetService(typeof(IDesignerHost)) != null            || Sys ...

  7. 如何在vs2010中添加Picture控件

    1.新建项目,并在对话框控件中拖入picture控件,并做如下设置 2.在picture控件的属性栏需要进行如下修改:ID需要修改,不能为static ID是控件的唯一标识,PictureCtrl(p ...

  8. 利用MFC Picture Control控件 加载bmp,png

    1.在资源视图,选择PictureControl,并且在属性中把Type设置为Bitmap. 2.加载PNG CStatic* pWnd = (CStatic*)GetDlgItem(IDC_PIC) ...

  9. delphi 中 image 控件加载bmp、JPG、GIF、PNG等图片的办法

    procedure TForm1.Button1Click(Sender: TObject);var  jpg: TJPEGImage; // 要use Jpeg单元begin  // 显示jpg大图 ...

随机推荐

  1. Hadoop2.6.0 动态增加节点

    本文主要从基础准备,添加DataNode和添加NodeManager三个部分详细说明在Hadoop2.6.0环境下,如何动态新增节点到集群中. 基础准备 在基础准备部分,主要是设置hadoop运行的系 ...

  2. Ubuntu 14.04 Nvidia显卡驱动手动安装及设置

      更换主板修复grub 引导后,无法从Nvidia进入系统(光标闪烁), 可能是显卡驱动出了问题. 1. 进入BIOS设置, 从集成显卡进入系统 将显示器连接到集显的VGI口, 并在BIOS中设置用 ...

  3. linux--每日一个命令

    编写shell脚本 hello.sh #!/bin/bash # The first program echo -e "\e[1;34m Hello world ! \e[0m" ...

  4. perl中my和our的区别分析

    来源: http://www.jb51.net/article/35528.htm perl中our的用法require 5.006当版本号小于 5.006 的时候,会返回失败,从而导致模块加载失败. ...

  5. linux下MMC/SD/SDIO驱动系列之二 ---- host注册过程(一)

    参考了 http://blog.csdn.net/xieweihua2012/article/details/12844733 在他的基础上更详细的解析源 ...................... ...

  6. CentOS6.6 搭建Zabbix_3.0

    公司有下发内网监控服务器的需求 使用zabbix监控 所以这篇文章是讲述的zabbix的搭建 其实网上很多地方都有 可以参考 环境安装 系统环境: # cat /etc/redhat-release ...

  7. 错误 1 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 C:\Users\Administ

    错误 1 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 C:\Users\Administ 这两个fatal error是因为从低版本的WTL到高版本的WTL转变后产生的 ...

  8. iOS多线程中performSelector

    下面两段代码都在主线程中运行,我们在看别人代码时会发现有时会直接调用,有时会利用performSelector调用,今天看到有人在问这个问题,我便做一下总结, [delegate imageDownl ...

  9. Android摄像头:只拍摄SurfaceView预览界面特定区域内容(矩形框)---完整(原理:底层SurfaceView+上层绘制ImageView)

    Android摄像头:只拍摄SurfaceView预览界面特定区域内容(矩形框)---完整实现(原理:底层SurfaceView+上层绘制ImageView) 分类: Android开发 Androi ...

  10. myeclipse中常用的快捷键

    存盘 Ctrl+s(肯定知道) 注释代码 Ctrl+/ 取消注释 Ctrl+\(Eclipse3已经都合并到Ctrl+/了) 代码辅助 Alt+/ 快速修复 Ctrl+1 代码格式化 Ctrl+Shi ...