【5】基于VS2017的MFC平台与OpenCV4.0.1联合小案列

最近由于要做项目所以做可视化界面,在网上查询了半天时间发现大部分MFC和OpenCV联合开发的案例都是基于OpenCV3.0以前,较为新的版本较少或者制作过程不清楚。为此本人将自己查阅资料写的基于VS2017的MFC平台与OpenCV4.0.1联合小案列写出来供大家参考,赠人玫瑰,手留余香,希望大家多多批评和指正。话不多说,直接上干货。

【1】测试效果图(点击显示图片就可以从文件夹中显示一张图片出来)

 

【2】实现过程及代码(vs2017和OpenCV4.0.1)

程序思想:
注解:namedWindow生成两个窗口:子窗口、父窗口
(1)把namedWindow创建的子窗口的大小调整为和图片控件大小一样
(2)获得namedWindow创建的父窗口:为了把该父窗口隐藏,用::ShowWindow(hParent, SW_HIDE);
(3)获得namedWindow创建的子窗口:为了把子窗口的父窗口设置为picture控件,即把图片显示在控件上,用SetParent函数。
(4)加载图片并显示:imread、imshow。

(1)创建MFC文档及可视化界面的初步设计

(2)可视化界面的初步设计(控件:一个button和一个picture contro)

(3)更改控件的ID

 

 

(3)代码的编辑

头文件设置  找到MatshowimageDlg.h添加以下代码

注意一定要添加 :#include "opencv2/highgui/highgui_c.h"

#include <iostream>
#include<opencv2/core.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include <opencv.hpp>

#include<string>

using namespace std;
using namespace cv;

初始化设置 找到MatshowimageDlg.cpp添加一下代码

	namedWindow("view", WINDOW_AUTOSIZE);	
	HWND hWnd = (HWND)cvGetWindowHandle("view");
	HWND hParent = ::GetParent(hWnd);
	::SetParent(hWnd, GetDlgItem(IDC_PIC_STATIC)->m_hWnd);
	::ShowWindow(hParent, SW_HIDE);

 

 

图像处理代码 找到MatshowimageDlg.cpp添加一下代码

CString picPath;   //定义图片路径变量  
	 
	CFileDialog dlg(TRUE, "*.*", "*.*", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"JPEG文件(*.jpg)|*.jpg|GIF文件(*.gif)|*.gif|bmp文件(*.bmp)|*.bmp|文件(*.*)|*.*|", NULL);
	
	if (dlg.DoModal() == IDOK)
	{
		picPath = dlg.GetPathName();  //获取图片路径  
	}
	//CString to string  使用这个方法记得字符集选用“使用多字节字符”,不然会报错  
	string picpath = picPath.GetBuffer(0);

	Mat image = imread(picpath);
	Mat imagedst;
	//以下操作获取图形控件尺寸并以此改变图片尺寸  
	CRect rect;
	GetDlgItem(IDC_PIC_STATIC)->GetClientRect(&rect);
	Rect dst(rect.left, rect.top, rect.right, rect.bottom);
	resize(image, imagedst, Size(rect.Width(), rect.Height()));
	imshow("view", imagedst);

 

【3】最终效果展示

【4】总结  

MFC结合OpenCV过程中有很多问题  都需要不断的调试 本来MFC的学习就是一件特别痛苦的事  但是未来可期 继续努力。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值