Opencv 基于MFC 显示图片 更改图片分辨率 保存图片 入门操作实例
2016-06-01 22:52
696 查看
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 文件中加入
表示调用Opencv中三个类来实现上面的三个功能。并且使用cv的命名空间。3、在 . cpp实现文件中
(1)第一个函数:将pic画在某个控件上。传入img,id。将它单独做成了一个函数用于后面使用
完结撒花。最近居然半夜开始写这种文档了。真是有点疯狂了。哈哈
本片文章将简单介绍,利用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; }
完结撒花。最近居然半夜开始写这种文档了。真是有点疯狂了。哈哈
相关文章推荐
- Visual C++中MFC消息的分类
- MFC中Radio Button的用法详解
- MFC对话框中添加状态栏的方法
- MFC创建右键弹出菜单的方法
- MFC中动态创建控件以及事件响应实现方法
- C++ 关于MFC多线程编程的注意事项
- MFC程序对文件的处理方法
- MFC自定义消息的实现方法
- MFC实现在文件尾追加数据的方法
- MFC之ComboBox控件用法实例教程
- 如何让页面在打开时自动刷新一次让图片全部显示
- 上传图片时JS自动显示图片
- MFC绘制不规则窗体的方法
- IE8引发 VS2005/2008 MFC向导出错的解决方案
- python中使用OpenCV进行人脸检测的例子
- opencv 做人脸识别 opencv 人脸匹配分析
- 使用opencv拉伸图像扩大分辨率示例
- MFC实现全屏功能代码实例
- 使用VS2010创建MFC ActiveX工程项目
- js 鼠标移动显示图片的简单实例