c++ opencv 3.2 +Mfc VS2015窗体显示图片方法
2017-07-28 15:18
656 查看
本文仅涉及一些核心步骤,具体OpenCV的配置以及其他的细节问题,请参考VS2010/MFC+OpenCV2.4.1打开图片。
opencv3.2的配置相较OpenCV2在依赖项的添加上会简略很多。
右击添加的按钮,属性,将其Caption改为OpenImg;
(2)同理,添加PictureControl控件
右击Picture控件,属性,打开控件属性窗口,其ID为IDC_STATIC,修改Type为Rectangle,将Picture控件大小调整合适(用于最终图像的显示)。
(3)右击按钮,添加事件处理程序
选择BN_CLICKED,类列表为CMFC_DEMODlg(交由Dialog类捕获按钮单击消息),函数名为OnBnClickedOpenImg,添加编辑
CvvImage.h
CvvImage.cpp下载地址:CvvImage.cpp
https://github.com/yuhuazou/StereoVision感觉这个文件很重要,同样的环境换这里的两个文件,就没问题了
【头文件】(右键)⇒添加现有项⇒CvvImage.h
【源文件】(右键)⇒添加现有项⇒CvvImage.cpp
(2)在C**Dlg类的声明中添加DrawPicToHDC()成员函数的声明:
(3)C**Dlg类对应的源文件(**Dlg.cpp)中添加DrawPicToHDC()的实现
(4)为新增按钮的响应函数(OnBnClickedOpenImg)添加代码:
上边的代码只是打通了按钮显示图片的功能和opencv与窗体框架融合不存问题,实际还需要
一下:Mat转IplImage
[cpp]viewplaincopy
//注意:浅拷贝-同样只是创建图像头,而没有复制数据
MatM;
IplImageimg=M;
IplImageimg=IplImage(M);
结果最终如下:
若编译出现:
warningC4996:'fopen':Thisfunctionorvariablemaybeunsafe.Considerusingfopen_sinstead.Todisabledeprecation,use_CRT_SECURE_NO_WARNINGS.Seeonlinehelpfordetails.
1>c:\programfiles\microsoftvisualstudio10.0\vc\include\stdio.h(234)
的错误:这是个日志帮助文件出现的错误:
方法1:
找到Debug属性页C/C++下得预处理器
在预处理定义的
WIN32
_WINDOWS
_DEBUG下添加_CRT_SECURE_NO_WARNINGS
方法2:
在*dlg.h最上部加入下边的过滤这个错误就可以了
#pragmawarning(disable:4996)
1.新建MFC对话框项目
基于对话框,不使用Unicode库,在静态库中使用MFC,完成2.配置OpenCV3.2
略,本博客有3.添加和设置控件
(1)菜单,视图,工具箱,打开工具箱⇒添加Button控件;右击添加的按钮,属性,将其Caption改为OpenImg;
(2)同理,添加PictureControl控件
右击Picture控件,属性,打开控件属性窗口,其ID为IDC_STATIC,修改Type为Rectangle,将Picture控件大小调整合适(用于最终图像的显示)。
(3)右击按钮,添加事件处理程序
选择BN_CLICKED,类列表为CMFC_DEMODlg(交由Dialog类捕获按钮单击消息),函数名为OnBnClickedOpenImg,添加编辑
4.添加OpenCV的CvvImage文件(.h,.cpp)
CvvImage.h下载地址:CvvImage.cpp下载地址:
【头文件】(右键)⇒添加现有项⇒CvvImage.h
【源文件】(右键)⇒添加现有项⇒CvvImage.cpp
5.添加代码
(1)打开C**Dlg类对应的头文件(**Dlg.h)的起始位置处添加:#include<opencv\cv.h> #include<opencv\highgui.h> #include"CvvImage.h"
(2)在C**Dlg类的声明中添加DrawPicToHDC()成员函数的声明:
voidDrawPicToHDC(IplImage*img,UINTID);
(3)C**Dlg类对应的源文件(**Dlg.cpp)中添加DrawPicToHDC()的实现
voidCMFC_DEMODlg::DrawPicToHDC(IplImage*img,UINTID) { CDC*pDC=GetDlgItem(ID)->GetDC(); HDChDC=pDC->GetSafeHdc(); CRectrect; GetDlgItem(ID)->GetClientRect(&rect); CvvImagecimg; cimg.CopyOf(img);//复制图片 cimg.DrawToHDC(hDC,&rect);//将图片绘制到显示控件的指定区域内 ReleaseDC(pDC); }
(4)为新增按钮的响应函数(OnBnClickedOpenImg)添加代码:
voidCMFC_DEMODlg::OnBnClickedOpenImg() { //TODO:在此添加控件通知处理程序代码 IplImage*image=NULL;//原始图像 if(image)cvReleaseImage(&image); image=cvLoadImage("D:\\demo.jpg",1);//显示图片 DrawPicToHDC(image,IDC_STATIC); }
6.编译运行,大功告成
上边的代码只是打通了按钮显示图片的功能和opencv与窗体框架融合不存问题,实际还需要
一下:Mat转IplImage
[cpp]
//注意:浅拷贝-同样只是创建图像头,而没有复制数据
MatM;
IplImageimg=M;
IplImageimg=IplImage(M);
DrawPicToHDC(image,IDC_STATIC);这个方法需要的是IplImage格式图片文件,而mat文件显示不了的.所以需要转换 所以按钮事件下的代码修改如下:
Matsrc,dst; src=imread("E:/opencv3.2/TestOpenCVInstall/Debug/openclose.png"); if(!src.data){ printf("couldnotloadimage...\n"); } namedWindow("inputimage",CV_WINDOW_AUTOSIZE); imshow("inputimage",src); charoutput_title[]="morphologydemo"; namedWindow(output_title,CV_WINDOW_AUTOSIZE); Matkernel=getStructuringElement(MORPH_RECT,Size(11,11),Point(-1,-1)); morphologyEx(src,dst,CV_MOP_OPEN,kernel);//开操作 /*morphologyEx(src,dst,CV_MOP_BLACKHAT,kernel);*/ //morphologyEx(src,dst,CV_MOP_TOPHAT,kernel); imshow(output_title,dst); //TODO:在此添加控件通知处理程序代码 IplImage*img=NULL;//原始图像 if(img)cvReleaseImage(&img); IplImageimg=IplImage(dst); //image=cvLoadImage("E:/opencv3.2/TestOpenCVInstall/Debug/mmm.jpg",1);//显示图片 DrawPicToHDC(&img,IDC_STATIC); //TODO:在此添加控件通知处理程序代码
结果最终如下:
若编译出现:
warningC4996:'fopen':Thisfunctionorvariablemaybeunsafe.Considerusingfopen_sinstead.Todisabledeprecation,use_CRT_SECURE_NO_WARNINGS.Seeonlinehelpfordetails.
1>c:\programfiles\microsoftvisualstudio10.0\vc\include\stdio.h(234)
的错误:这是个日志帮助文件出现的错误:
方法1:
找到Debug属性页C/C++下得预处理器
在预处理定义的
WIN32
_WINDOWS
_DEBUG下添加_CRT_SECURE_NO_WARNINGS
方法2:
在*dlg.h最上部加入下边的过滤这个错误就可以了
#pragmawarning(disable:4996)
相关文章推荐
- vs2015+opencv3.2+mfc读取摄像头显示在图片控件Picture Control
- VS2017 MFC的Picture Control控件显示opencv3.3图片的方法
- 知乎上有一个问题“在mfc框架中,有上面方法能直接将opencv2.0库中的Mat格式图片传递到Picture Control”中显示?
- vs2015 MFC中动态显示图片
- 在 MFC 框架中,有什么方法能直接将 OpenCV 2.0 库中 Mat 格式的图片传递到 Picture Control(图片控件)显示?
- VS2017配置opencv3.2在MFC单文档中显示图片
- 在MFC对话框中显示图片的三种方法(有两种使用OpenCv)
- 图像处理之其他杂项(一)之MeanShift的目标跟踪算法opencv c++代码 VS2015+opencv3.2
- [求助][已解决]MFC+OpenCV在子窗体中显示图片 20160312
- 【C++ MFC+opencv】打开文件夹中的图片并在picture控件中显示
- VS2013 MFC使用opencv3.0显示图片
- MFC的 在对话框显示图片的方法
- 利用MFC和opencv读取视频显示图像方法
- Opencv (Opencv2)结合MFC学习数字图像处理【3】---显示图片
- C++中使用CAtlHttpClient显示网络图片的方法,支持png,bmp,gif图片格式
- vc/mfc获取rgb图像数据后动态显示及保存图片的方法
- opencv2.2 MFC picture控件中显示图片
- C++(MFC)控件上显示图片
- 关于MFC中显示OpenCV Mat矩阵中的图像(一种新的解决方法)
- MFC动态显示图片的方法