VS2017配置opencv3.2在MFC单文档中显示图片

  • Post author:
  • Post category:其他





最近微软发布了VS2017,增加了很多更实用的功能,其中让笔者兴奋不已的GPU加速功能。只需要切换一个按键便能享受GPU的加速,让程序的速度几何倍数的加快。




可是vs2017比较刚刚发布很多的第三方库和第三方的工具都没有更新过来。其中包括笔者在标题上提到的Opencv3.2以及笔者以前一直使用的C++第三方GUI库QT。可是笔者着实不想放弃这令人着迷的VS2017。于是千方百计,到处翻资料终于在MFC单文档下显示出了opencv的图片。


一,首先要配置好opencv




因为opencv官网中编译的.dll文件并不支持VS2017。所以我们自己要编译opencv的dll文件。这方面网络上有很多资料,主要的过程是在CMake的软件下用vs2017的编译工具编译opencv的源文件再生成其特定的dll文件便可以直接在VS2017下直接使用opencv了。


二,在MFC单文档下先显示图片




VC++的单文档可以直接显示VC++库里面的CImgae类,首先我们在***View.h中添加一个变量CImage image;这里笔者在private下创建的该变量。然后我们在资源文件中添加一个事件处理将它创建在**

View.cpp文件中,函数名任意取。




void CMFCApplication1View::OnOpenImage()
{
	// TODO: 在此添加命令处理程序代码
	CFileDialog dlg(TRUE/*, _T(".bmp"), _T("*.bmp"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("位图文件(*.bmp)|*.bmp | JEPG文件(*.jpg) | *.jpg || ")*/);
	if (dlg.DoModal() == IDOK)
	{
		if (!image.IsNull())
		{
			image.Destroy();
		}
		image.Load(dlg.GetPathName());
		//CString cstr = dlg.GetPathName();
		str = CStringA(dlg.GetPathName());
		pic = imread(str, CV_LOAD_IMAGE_COLOR);
		Invalidate();
	}
}



上面便是该函数的全部实现,然后修改OnDraw()函数,如下:




void CMFCApplication1View::OnDraw(CDC* pDC)
{
	CMFCApplication1Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;

	// TODO: 在此处为本机数据添加绘制代码
	if (!image.IsNull())
	{
		image.Draw(pDC->GetSafeHdc(), 0, 0);
	}
}



修改完成后便可以运行程序点击按钮便可以显示出图片。



三,实现Mat



版权声明:本文为qq_22636145原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。