在MFC中使用opencv2以上版本对图像进行显示
2017-01-05 17:52
519 查看
前提是编译器已经配置好编译环境。
一、新建项目
菜单,文件 - 新建 - 项目
选择Visual C++,MFC应用程序,名称为MFC_DEMO
基于对话框,不使用Unicode库,在静态库中使用MFC,完成
出现如下界面
添加和设置控件
菜单,视图,工具箱,打开工具箱
选中Button控件
将Button从工具箱向窗体拖动,添加按钮
同理,添加Picture Control控件
右击Picture控件,属性,打开控件属性窗口,其ID为IDC_STATIC,修改Type为Rectangle
将Picture控件大小调整合适,如图
右击添加的按钮,属性
可将Caption改为OpenImg
右击按钮,添加事件处理程序
选择BN_CLICKED,类列表为CMFC_DEMODlg,函数名为OnBnClickedOpenImg,添加编辑
四、添加OpenCV的CvvImage文件
右击解决资源方案管理器中的头文件,添加,现有项,选择CvvImage.h
同样,源文件中添加CvvImage.cpp
在类视图或解决方案管理器中双击打开MFC_DEMODlg.h
添加代码
#include <opencv2\core\core.hpp>
void DrawPicToHDC(IplImage *img, UINT ID);
在MFC_DEMODlg.cpp文件中添加函数
在 C**Dlg.h 类所对应的源文件(**Dlg.cpp)的
2
1
2
修正一个问题:
view窗口句柄的方法,虽然设置的view窗口是在相应ID的PictureControl上显示了,但显示的图片仍保持原本的尺寸大小,而不是根据在对话框中的PictureControl窗口大小自适应显示;
所以,在调用imshow(“view”, img) 前最好先加上:
一、新建项目
菜单,文件 - 新建 - 项目
选择Visual C++,MFC应用程序,名称为MFC_DEMO
基于对话框,不使用Unicode库,在静态库中使用MFC,完成
出现如下界面
添加和设置控件
菜单,视图,工具箱,打开工具箱
选中Button控件
将Button从工具箱向窗体拖动,添加按钮
同理,添加Picture Control控件
右击Picture控件,属性,打开控件属性窗口,其ID为IDC_STATIC,修改Type为Rectangle
将Picture控件大小调整合适,如图
右击添加的按钮,属性
可将Caption改为OpenImg
右击按钮,添加事件处理程序
选择BN_CLICKED,类列表为CMFC_DEMODlg,函数名为OnBnClickedOpenImg,添加编辑
四、添加OpenCV的CvvImage文件
右击解决资源方案管理器中的头文件,添加,现有项,选择CvvImage.h
同样,源文件中添加CvvImage.cpp
在类视图或解决方案管理器中双击打开MFC_DEMODlg.h
添加代码
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp> #include "CvvImage.h"在MFC_DEMODlg.h文件中CMFC_DEMODlg类的声明中添加函数DrawPicToHDC()的声明
void DrawPicToHDC(IplImage *img, UINT ID);
在MFC_DEMODlg.cpp文件中添加函数
void CMFC_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 ); }
在 C**Dlg.h 类所对应的源文件(**Dlg.cpp)的
BOOL CMFC_DEMODlg::OnInitDialog()添加:
cv::namedWindow("view", cv::WINDOW_AUTOSIZE); HWND hWnd = (HWND)cvGetWindowHandle("view"); HWND hParent = ::GetParent(hWnd); ::SetParent(hWnd, GetDlgItem(IDC_STATIC)->m_hWnd); ::ShowWindow(hParent, SW_HIDE);
响应鼠标左键,显示图像
在 OnBnClickedOpenImage 函数体内:cv::Mat img = cv::imread("./BaboonRGB.bmp"); cv::imshow("view", img);1
2
1
2
修正一个问题:
view窗口句柄的方法,虽然设置的view窗口是在相应ID的PictureControl上显示了,但显示的图片仍保持原本的尺寸大小,而不是根据在对话框中的PictureControl窗口大小自适应显示;
所以,在调用imshow(“view”, img) 前最好先加上:
cv::Mat m_dst; cv::Mat img = cv::imread("./BaboonRGB.bmp"); CRect rect; GetDlgItem(IDC_STATIC)->GetClientRect(&rect); cv::Rect dst(rect.left, rect.top, rect.right, rect.bottom); cv::resize(img, m_dst, cv::Size(rect.Width(), rect.Height())); // 需要添加 #include <opencv2/imgproc/imgproc.hpp> cv::imshow("view", m_dst);
相关文章推荐
- OpenCV 2.2版本以上显示图片到 MFC 的 Picture Control 控件中
- 使用GDI+可以方便的把OpenCV的图像矩阵类型数据显示在MFC的窗口中
- 使用halcon(版本10.0 64位)读入图像并进行显示,使用ChartAxis类实现图像直方图的显示?
- 使用Opencv调用摄像头并在MFC中进行视频显示
- OpenCV 2.2版本以上显示图片到 MFC 的 Picture Control 控件中
- 在MFC中使用opencv显示图像到MFC的PictureBox控件中
- OpenCV学习笔记(8)VS2008 MFC下使用OpenCV2.0进行简单图像处理
- OpenCV学习笔记(8)VS2008 MFC下使用OpenCV2.0进行简单图像处理
- 在MFC中使用OpenCV,控件显示图像
- OpenCV2.2版本以上显示图片到MFC 的picture control中
- OpenCV学习笔记(8)VS2008 MFC下使用OpenCV2.0进行简单图像处理
- opencv 2.0以上版本 图像的载入,显示和输出
- MFC中使用OpenCV显示摄像头图像
- OpenCV 2.2版本以上显示图片到 MFC 的 Picture Control 控件中
- 使用谷歌开源组件tesseract-OCR识别身份证,通过opencv处理图像后再进行识别(windows版本)
- MFC中使用OpenCV显示摄像头图像并二值化
- MFC使用OpenCV在文档窗口中显示图像(支持多图片格式)
- 使用OpenCV在MFC中显示图像
- MFC中使用openCV显示、处理图像
- android 使用NDK进行图像处理(openCV)时的图像转换问题(灰度图显示)