MFC中使用OpenCV显示图像

*************************************文章内容无意义,存档用****************************************


简单介绍在MFC对话框里使用Picture控件来显示和处理图像,主要使用的是CvvImage这个被opencv2.2以上版本取消的类。

更多功能参考:http://blog.csdn.net/chenyusiyuan/article/details/4744097


1、新建“对话框”类型的MFC应用程序


2、添加opencv的依赖库(这里方便起见添加opencv2.4版本的所有依赖库):

opencv_calib3d240d.lib
opencv_contrib240d.lib
opencv_core240d.lib
opencv_features2d240d.lib
opencv_flann240d.lib
opencv_gpu240d.lib
opencv_highgui240d.lib
opencv_imgproc240d.lib
opencv_legacy240d.lib
opencv_ml240d.lib
opencv_nonfree240d.lib
opencv_objdetect240d.lib
opencv_photo240d.lib
opencv_stitching240d.lib
opencv_ts240d.lib
opencv_video240d.lib
opencv_videostab240d.lib



3、添加CvvImage.h和CvvImage.cpp文件,并在CxxxDlg.cpp中包含(这里下载):



4、添加一个picture control(控件ID:IDC_SHOW_IMAGE)button控件(控件ID:IDC_BTN_OPEN)



5、为button控件添加事件响应函数:

两个地方:一个是项目使用“多字节字符集”,所以CString和string之间可以默认转化;二是载入图像采用了高版本的Mat对象,转化为CvvImage时通过IplImage间接转化(参考我的另一篇:http://blog.csdn.net/holybin/article/details/17711013)。

void CtestDlg::OnBnClickedBtnOpen()
{
	// TODO: 在此添加控件通知处理程序代码
	//open image dialog
	//包含所有opencv支持的图像格式
	CFileDialog   dlgOpenFile(TRUE,
		NULL,
		NULL,
		OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_FILEMUSTEXIST,
		"Windows bitmap(*.bmp;*.dib)|*.bmp;*.dib|JPEG image(*.jpeg;*.jpg;*.jpe)|*.jpeg;*.jpg;*.jpe|\
		Portable network graphics(*.png)|*.png|Portable bitmap forma(*.pbm;*.pgm;*.ppm)|*.pbm;*.pgm;*.ppm|\
		Sun rasters(*.sr;*.ras)|*.sr;*.ras|TIFF image(*.tif;*.tiff)|*.tif;*.tiff|OpenEXR HDR image(*.exr)|*.exr|\
		JPEG 2000 image(*.jp2)|*.jp2|\
		All Files(*.*)|*.*||");

	//open ok
	string imgPath;
	if(dlgOpenFile.DoModal()==IDOK)
	{
		//get image path
		imgPath = dlgOpenFile.GetPathName(); //注:使用“多字节字符集”才可以直接默认从CString转string
	}
	else
	{
		return;
	}

	//load image
	Mat srcImg = imread(imgPath);
	if (srcImg.empty())
	{
		AfxMessageBox("Error loading source image!", MB_ICONSTOP|MB_OK);
		return;
	}

	/
	//Mat to CvvImage
	IplImage iplSrcImg = srcImg;	//注:浅拷贝只复制数据头
	CvvImage cvvSrcImg;
	cvvSrcImg.CopyOf( &iplSrcImg );
	/

	//show image
	CDC* pDC = GetDlgItem(IDC_SHOW_IMAGE)->GetDC();
	HDC hDC = pDC->GetSafeHdc();
	CRect rect;
	GetDlgItem(IDC_SHOW_IMAGE)->GetClientRect(&rect);
	cvvSrcImg.DrawToHDC(hDC, &rect);

	ReleaseDC( pDC );
}


6、运行结果:


这里没有加入缩放,来适应picture control的显示区域比例,实现起来也很简单。整个工程文件在这里

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值