c++ opencv 3.2 +Mfc VS2015窗体显示图片方法
本文仅涉及一些核心步骤,具体 OpenCV 的配置以及其他的细节问题,请参考 VS2010 / MFC + OpenCV 2.4.1打开图片。
1. 新建 MFC 对话框项目
基于对话框,不使用Unicode库,在静态库中使用MFC,完成
2. 配置 OpenCV 3.2
略, 本博客有
opencv 3. 2的配置相较 OpenCV 2 在依赖项的添加上会简略很多。
3. 添加和设置控件
(1)菜单,视图,工具箱,打开工具箱 ⇒ 添加 Button 控件;
右击添加的按钮,属性,将其 Caption 改为 OpenImg;
(2)同理,添加Picture Control控件
右击 Picture 控件,属性,打开控件属性窗口,其 ID 为 IDC_STATIC,修改Type 为 Rectangle,将 Picture 控件大小调整合适(用于最终图像的显示)。
(3)右击按钮,添加事件处理程序
选择BN_CLICKED,类列表为CMFC_DEMODlg(交由 Dialog 类捕获按钮单击消息),函数名为OnBnClickedOpenImg,添加编辑
4. 添加 OpenCV 的 CvvImage 文件(.h, .cpp)
CvvImage.h 下载地址:CvvImage.h
CvvImage.cpp 下载地址:CvvImage.cpp
https://github.com/yuhuazou/StereoVision 感觉这个 文件很重要, 同样的环境换这里 的两个文件,就没问题了
【头文件】(右键)⇒ 添加现有项 ⇒ 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()成员函数的声明:
void DrawPicToHDC(IplImage *img, UINT ID);
(3)C**Dlg 类对应的源文件(**Dlg.cpp)中添加 DrawPicToHDC() 的实现
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 );
}(4)为新增按钮的响应函数(OnBnClickedOpenImg)添加代码:
void CMFC_DEMODlg::OnBnClickedOpenImg()
{
// TODO: 在此添加控件通知处理程序代码
IplImage *image=NULL; //原始图像
if(image) cvReleaseImage(&image);
image = cvLoadImage("D:\\demo.jpg",1); //显示图片
DrawPicToHDC(image, IDC_STATIC);
}
6. 编译运行,大功告成
上边的代码只是打通了按钮显示图片的功能和opencv 与窗体框架融合不存问题,实际还需要
一下:Mat转IplImage
- //注意:浅拷贝 - 同样只是创建图像头,而没有复制数据
- Mat M;
- IplImage img = M;
- IplImage img = IplImage(M);
DrawPicToHDC(image, IDC_STATIC); 这个方法需要的是IplImage 格式图片文件,而mat文件显示不了的.所以需要转换
所以按钮事件下的代码修改如下:
Mat src, dst;
src = imread("E:/opencv3.2/TestOpenCVInstall/Debug/openclose.png");
if (!src.data) {
printf("could not load image...\n");
}
namedWindow("input image", CV_WINDOW_AUTOSIZE);
imshow("input image", src);
char output_title[] = "morphology demo";
namedWindow(output_title, CV_WINDOW_AUTOSIZE); Mat kernel = getStructuringElement(MORPH_RECT, Size(, ), Point(-, -));
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); IplImage img = IplImage(dst);
// image = cvLoadImage("E:/opencv3.2/TestOpenCVInstall/Debug/mmm.jpg", 1); //显示图片
DrawPicToHDC(&img, IDC_STATIC);
// TODO: 在此添加控件通知处理程序代码
结果最终如下:
若编译出现:
warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(234)
的错误:这 是个日志帮助文件出现的错误:
方法1:
找到Debug属性页C/C++下得预处理器
在预处理定义的
WIN32
_WINDOWS
_DEBUG下添加_CRT_SECURE_NO_WARNINGS
方法2:
在*dlg.h 最上部加入下边的过滤这个错误就可以了
#pragma warning(disable:4996)
c++ opencv 3.2 +Mfc VS2015窗体显示图片方法的更多相关文章
- 我的Android进阶之旅------> Android在TextView中显示图片方法
面试题:请说出Android SDK支持哪些方式显示富文本信息(不同颜色.大小.并包括图像的文本信息).并简要说明实现方法. 答案:Android SDK支持例如以下显示富文本信息的方式. 1.使用T ...
- 我的Android进阶之旅------> Android在TextView中显示图片方法
面试题:请说出Android SDK支持哪些方式显示富文本信息(不同颜色.大小.并包含图像的文本信息),并简要说明实现方法. 答案:Android SDK支持如下显示富文本信息的方式. 1.使用Tex ...
- C++开发人脸性别识别教程(9)——搭建MFC框架之显示图片
在之前的博客中我们已经实现读取用户选定的目录.并将其路径保存在对应的变量中.在这篇博文中我们将介绍怎样借助CvvImage类将图片显示在picture控件中,并自己主动读取目录下的其它图片. 一.加入 ...
- MFC 在对话框显示图片的多种方法
我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) 为方便说明,我们已经建好一 ...
- MFC 在对话框显示图片的多种方法(四种方法)
我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) 为方便说明,我们已经建好一个基 ...
- mfc中循环显示图片
UINT CPalmIdentDlg::UpdateCImg(LPVOID p) { struct params *pa = (struct params*)p; int *imgarray = pa ...
- opencv cv::imageshow 不加waitKey()不能显示图片
官方解释是highgui 没有给imshow绘制处理的时间.需要在imshow添加waitKey() waitKey()单位是ms
- opencv如何在jupyter notebook中显示图片
方法一: from matplotlib import pyplot as plt import numpy as np import cv2 img = cv2.imread('img.jpg') ...
- MFC对话框中显示背景图片
在MFC对话框中显示图片,四个步骤. 1.首先得在VC6.0或者VS2008(其他版本也是一样)中导入GDI文件.(网上下载:) GDI含义是图形设备接口,主要任务是负责系统与绘图程序之间的信息交换, ...
随机推荐
- Android Studio 版本间区别
2.3.2 ->3.0.1 Gradle版本为4.1 com.android.tools.build:gradle:3.0.x Android Monitor 被换成了 Android P ...
- 【原】wow64 x86/x64 代码切换过程分析
下面以ntdll32!ZwQueryInformationProcess API为例分析 x86代码与x64代码之间的切换过程, 32bit的test程序: step1: ntdll32!ZwQuer ...
- HTML+CSS基础课程
慕课网上的课程 为了方便以后查阅 现做笔记如下 首先 了解下面的知识 1. HTML是网页内容的载体.内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字.图片.视频等. 2. CSS样式是 ...
- linux下搭建生成HLS所需的.ts和.m3u8文件
要想利用HLS来实现视频的在线播放,就得需要将一个完整的视频文件切割成多个ts视频流,然后利用m3u8的索引文件来播放. 在Mac下,苹果提供了streamingTools的工具,里面有mediafi ...
- MVC异步控制器加载一个网页的所有内容
public void PageAsync() { AsyncManager.OutstandingOperations.Increment(); WebRequest req = WebReques ...
- hdu2973-YAPTCHA-(欧拉筛+威尔逊定理+前缀和)
YAPTCHA Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- Python基础学习Day5 字典的增、删、改、查的用法 分别赋值
一.字典的介绍 字典:字典是Python的基础数据类型之一:字典可以存储大量数据,关系型数据. 同样是Python中唯一的映射类数据类型. 数据类型的分类: 可变的数据类 ...
- BOS物流项目第十一天
教学计划 1.在realm中进行授权 2.使用shiro的方法注解方式权限控制 a. 在spring文件中配置开启shiro注解支持 b. 在Action方法上使用注解 3.使用shiro的标签进 ...
- ABAP 常用函数
函数名 描述 SD_VBAP_READ_WITH_VBELN 根据销售订单读取表vbap中的信息EDIT_LINES 把READ_TEXT返回的LINES中的行按照TDFORMAT=“*”重新组织VI ...
- echarts 树图
1 事件:事件绑定,事件命名统一挂载到require('echarts/config').EVENT(非模块化为echarts.config.EVENT)命名空间下,建议使用此命名空间作为事件名引用, ...