Opencv 基于MFC 显示图片 更改图片分辨率 保存图片 入门操作实例

原创 2016年06月01日 22:52:13

Opencv 基于MFC 显示图片 更改图片分辨率 保存图片

本片文章将简单介绍,利用Opencv在MFC框架下,实现①显示图片图像 ,②更改图片图像分辨率,③保存图片的入门操作实例

本文章功能实现依托于MFC的控件进行显示,所以有些变量名是控件的变量名,特此申明以免新手误解。(PS:如果是老手,就直接观看。如果是编程入门级新手,就下载下面那个工程。)

代码实例工程下载(下载之后,需要配置opencv才能生成可执行文件):http://download.csdn.net/detail/i_likechard/9538367

代码exe可执行文件下载(可直接运行,不需安装其它东西):http://download.csdn.net/download/i_likechard/9934294

直接上代码步骤  

1、首先配置Opencv版本环境。我的版本是Opencv2.4.7 好像是这个。如果还没有下载Opencv、配置Opencv。那就先去弄了再来。对于不同版本的Opencv配置方法基本相同。但是难免遇到一些函数参数可能会有不同。

这是我之前配置Opencv后改写的一篇文章,百度链接:http://wenku.baidu.com/view/01c7a2ec580216fc710afd18

2、在 . h 文件中加入

#include "highgui.h"
#include "CvvImage.h"

using namespace cv;
Public:
IplImage *image; //表示原始图片
IplImage *dest;<span style="white-space:pre">	</span>//表示目标图片
CString m_PathName;//用于保存图片路径。


表示调用Opencv中三个类来实现上面的三个功能。并且使用cv的命名空间。3、在 . cpp实现文件中

(1)第一个函数:将pic画在某个控件上。传入img,id。将它单独做成了一个函数用于后面使用

void CopencvcatDlg::DrawPicToHDC( IplImage *img, UINT ID )
{
		
	//HWND h = ::FindWindow(CopencvcatDlg,NULL);
	CDC *pDC = GetDlgItem(ID)->GetDC();
	HDC hdc=pDC->GetSafeHdc();
	/*********************************************************/
	CRect rect;
	GetDlgItem(ID)->GetClientRect(&rect);
	CvvImage cimg;<span style="white-space:pre">	</span>//实例一个cimg对象
	cimg.CopyOf(img,img->nChannels); //Copyof实现把所有通道拷贝(当然也可以选择单通道,这样出来的图片就是黑白了。)
	cimg.DrawToHDC(hdc,&rect);
	ReleaseDC(pDC);
}
(2)第二个函数用于实现更改图片分辨率(大小)。函数中设置为缩小为原始图像的一半(可更改)

void CopencvcatDlg::OnChangeSizeAndPixel()
{
	// TODO: 在此添加控件通知处理程序代码
	CvSize size;
	double scale = 0.5;
	if(image)
	{
		size.height = image->height*scale;
		size.width = image->width*scale;
	}
	dest=cvCreateImage(size,image->depth,image->nChannels);
	cvResize(image,dest,1);
	DrawPicToHDC(dest,IDC_STATIC13);//调用第一个函数将缩小分辨率和大小的图像进行控件显示图片
}
(3)第三个函数用于打开文件选择需要显示的图片并进行显示。
void CopencvcatDlg::OnOpenFileAndShowImage()
{
	// TODO: 在此添加控件通知处理程序代码
	CFileDialog picfiledlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
		"JPG(*.jpg)|*.jpg|位图文件(*.bmp)|*.bmp|", NULL/*AfxGetMainWnd()*/);
	if(picfiledlg.DoModal()==IDOK)
	{
		m_PathName=picfiledlg.GetPathName();.//获取打开文件路径,用于原始图片copy
		m_FileName=picfiledlg.GetFileName(); //用于保存更改后的照片

		image=cvLoadImage(m_PathName,1); //使用cvLoadImage(),按照路径加载出图片。第二个参数为指定读入图片的深度和颜色
		DrawPicToHDC(image,IDC_STATIC12); //调用第一个函数吧原始图像进行选择控件显示
<span style="white-space:pre">		</span>//m_static10.SetWindowTextA(_T("打开文件正常"));
		//GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);	
		//GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE);	
		//GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
		//GetDlgItem(IDC_BUTTON3)->EnableWindow(TRUE);
		return;
	}
	else
	{
		//m_static10.SetWindowTextA(_T("打开文件失败"));
		return;
	}
	
}
(4)第四个函数用于保存更改了大小和分辨率的图像

void CopencvcatDlg::OnSaveTheNewImage()
{
	// TODO: 在此添加控件通知处理程序代码
	CFileDialog picfiledlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
		"JPG(*.jpg)|*.jpg", NULL);
	CString str=".jpg";
	m_PathName="";
	m_FileName="";
	if(picfiledlg.DoModal()==IDOK)
	{
		m_PathName=picfiledlg.GetPathName();
		m_PathName+=str;
		int x=cvSaveImage(m_PathName,dest,0);
		//GetDlgItem(IDC_BUTTON3)->EnableWindow(TRUE);
		if (x!=0)
		{
			//GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);	
			//GetDlgItem(IDC_BUTTON3)->EnableWindow(TRUE);	
			//GetDlgItem(IDC_BUTTON4)->EnableWindow(TRUE);
			//m_static10.SetWindowTextA(_T("保存正常"));
			return;
		}
		else
		{
			//m_static10.SetWindowTextA(_T("保存异常了,查一下代码"));
		}

	}

	return;
}

完结撒花。最近居然半夜开始写这种文档了。真是有点疯狂了。哈哈

版权声明:本文为没有蛀牙lm的原创文章,未经没有蛀牙lm的允许不可转载。 http://blog.csdn.net/i_likechard

OpenCV+ MFC 对图像的读取、显示、保存

opencv和mfc下对图像的读取、显示、保存

opencv打开图片保存图片

需要在C**Doc和C**View中进行相应修改 图像打开: Doc.cpp中: [cpp] view plaincopy ...
  • dearm23
  • dearm23
  • 2015年11月16日 00:06
  • 581

MFC多文档中opencv处理图像打开、保存

需要在C**Doc和C**View中进行相应修改 图像打开: Doc.cpp中: BOOL CCVMFCDoc::Load(IplImage** pp, LPCTSTR csFile...

MSCOMM串口控件在VS2010中的使用

1、前言        之前的博客中有一篇关于MSCOMM使用的文章,里面最然给出了例子,但是对MSCOMM的使用介绍的不够。加之,近来又接触了上位机编程方面的东西,遂详细的做点笔记在这里。     ...

关于OpenCV3版本与MFC配合显示图片

MFC+OpeCV3简单实现图片加载:OpenCV2.2以后取消了CvvImage类的相关文件,其内部函数DrawToHDC,导致了在后续版本中无法再MFC的Picture空间中显示图片,一般的做法是...

OpenCV入门笔记(二) 图片的文件操作

下面介绍一下重要的几个,设计基本 图片处理 的函数,依次来了解OpenCV的入门知识。具体的详细用法还是以官方的API【Official Tutorials】【Python-OpenCV】为准。imr...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Opencv 基于MFC 显示图片 更改图片分辨率 保存图片 入门操作实例
举报原因:
原因补充:

(最多只允许输入30个字)