您的位置:首页 > 运维架构

基于MFC单文档下调用opencv库并将图片效果显示在单文档窗口

2016-12-14 08:32 501 查看
      对比于网络上的MFC对话框显示图像处理的效果,按下控件就会有对话框的弹出,为此为了美观和方便,便制作了基于单文档调用opencv库的方式,并使图片处理效果一直悬浮在单文档的窗口中。 opencv库对于二维图像处理有着极大的方便,此篇博客主要是为了实现opencv库与MFC单文档的较为完整的配合。

     在新的单文档中用opencv显示图像,主要用到了cvvImage类,[b]cvvImage类包装了IplImage结构并提供了一些相关操作的函数,在C项目名view.h头文件中引用cvvImage.h头文件,同时须在头文件和源文件中添加cvvImage.h和cvvImage.cpp文件。在[b]C项目名view.h头文件加入cvvImage对象。[/b][/b]

[b][b]代码如下:[/b][/b]



private:
cvvImage image;



为了实现能打开任意图像不同的图片格式,在打开图像函数::OnOpen()中添加如下代码:

{
// TODO: 在此添加命令处理程序代码
CFileDialog dlg(TRUE, _T(".jpg"), _T(".jpg"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("JPEG 图像文件|*.jpg|位图文件|*.bmp| \GIF 图像文件|*.gif|PNG 图像文件|*.png||"));
if (dlg.DoModal() == IDOK)
{
CString m_FilePath = dlg.GetPathName();
char * path = (LPSTR)(LPCTSTR)m_FilePath;
IplImage * Input_Img = cvLoadImage((CT2CA)m_FilePath, CV_LOAD_IMAGE_COLOR);
cimg.CopyOf(Input_Img);
Mat img=Input_Img;
imwrite("yuantu.jpg", img );

//	if (cimg.GetImage()!=NULL)
//	{
//		cimg.Destroy();
//	}
//	cimg.Load((CT2CA)m_FilePath);
//}
//

}
//CString m_strPicPath;
//  IplImage* TheImage;
//    CFileDialog dlg(true,_T("*.bmp"),NULL,OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY,
//		          _T("image file(*.bmp;*.jpg)|*.bmp;*.jpg|All Files(*.*)|*.*|"),NULL);  //弹出选择图片对话框
//	  dlg.m_ofn.lpstrTitle=_T("open Image");
//	    if(dlg.DoModal()!=IDOK)
//			    return ;
//		  m_strPicPath = dlg.GetPathName();
//		    m_strPicPath.Replace(_T("//"),_T("////"));
//			  TheImage=cvLoadImage((CT2CA)m_strPicPath,1);

Invalidate();
}
显示图像便在view::OnDraw()中添加如下代码:CopencvtuxiangDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
if(cimg.GetImage()!=NULL)
{

CRect r;
GetClientRect(&r);
SetRect(r, 0, 0, cimg.Width(), cimg.Height()); //将cimg显示出来
cimg.DrawToHDC(pDC->GetSafeHdc(), r);
//cimg.Destroy();
// TODO: 在此处为本机数据添加绘制代码
}显示效果如下:


之后还将一些opencv关于图像处理的函数调用进去,实现一个个功能变换,先将打开的原图写入inwrite到“yuantu”中,之后再进行读出inread。

例如canny边缘检测:



还有一些其他变换就不一一演示了;

[b]     [/b]

      代码在上传资源中:http://download.csdn.net/my








                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: