OPENCV笔记(二)打开文件夹读取图片

OPENCV笔记都是记录MFC下做图像处理的项目时,遇到的问题,留此博客以备记录。


本文主要是需要打开一个对话框,手动选取图片,显示在MFC的picture control上。关于在程序中使用绝对路径读取图片的代码,这里直接给出,不做过多的说明了。

OpenCV使用绝对路径读取图片

void CMyDlg::OnBnClickedBtnloadimg()
{
	// TODO:  在此添加控件通知处理程序代码
	IplImage *SrcImg;

	SrcImg = cvLoadImage("c:\\users\\administrator\\desktop\\1.jpg");//使用绝对路径读取图片
	//SrcImg = cvLoadImage(".\\1.jpg"); //表示从当前文件夹下读取
	if (!SrcImg->imageData)
	{
		AfxMessageBox("cvLoadImage() err");//使用多字节字符集
		//AfxMessageBox(_T("cvLoadImage() err")); //使用Unicode字符集
	}
	if (SrcImg->nChannels != 1)//如果不是灰度图,转换成灰度图
	{
		IplImage *GrayImg = cvCreateImage(cvGetSize(SrcImg), IPL_DEPTH_8U, 1);
		cvCvtColor(SrcImg, GrayImg, CV_BGR2GRAY);
	}
	else
	{
		cvReleaseImage(&GrayImg);
		GrayImg = SrcImg;
	}
	/*
	picture control显示图片,picture control的ID为IDC_ShowSrcImg
	*/
	//获取IDC_STATIC控件的设备环境,以便对其进行图像操作
	CDC* pDCSrc = GetDlgItem(IDC_ShowSrcImg)->GetDC();//获得显示空间的DC,MFC类一般都是以C开头
	HDC  hDCSrc = pDCSrc->GetSafeHdc();//得到hDC句柄进行绘图操作
	CvvImage cimgsrc;
	cimgsrc.CopyOf(GrayImg);
	//将图像显示到IDC_ShowImgSrc控件上
	CRect rectsrc;
	GetDlgItem(IDC_ShowSrcImg)->GetClientRect(&rectsrc);
	cimgsrc.DrawToHDC(hDCSrc, &rectsrc);
	// 释放
	ReleaseDC(pDCSrc);
}

OpenCV弹出对话框,选择图片进行显示

void CMyDlg::OnBnClickedBtnopenimg()
{
	// TODO:  在此添加控件通知处理程序代码
	IplImage* SrcImg = NULL;
	CFileDialog dlg(
		TRUE, _T("*.bmp;*.jpg;*.tif"), NULL,
		OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY,
		"image files All Files (*.*) |*.*||", NULL
		);// 选项图片的约定;  
	dlg.m_ofn.lpstrTitle = _T("打开图片");// 打开文件对话框的标题名;(*.bmp; *.jpg) |*.bmp; *.jpg |  
	if (dlg.DoModal() == IDOK)// 判断是否获得图片;  
	{

		if (dlg.GetFileExt() != "bmp" && dlg.GetFileExt() != "jpg"&&dlg.GetFileExt() != "tif")
		{
			AfxMessageBox(_T("请选择正确的图片格式!"), MB_OK);
			return;
		}

		CString mPath = dlg.GetPathName();// 获取图片路径;  

		SrcImg = cvLoadImage(mPath);//读取图片、缓存到一个局部变量ipl中;  
		if (!SrcImg)// 判断是否成功载入图片;  
			return;
	}

	/*
	picture control显示图片,picture control的ID为IDC_ShowSrcImg
	*/
	//获取IDC_STATIC控件的设备环境,以便对其进行图像操作
	CDC* pDCSrc = GetDlgItem(IDC_ShowSrcImg)->GetDC();//获得显示空间的DC,MFC类一般都是以C开头
	HDC  hDCSrc = pDCSrc->GetSafeHdc();//得到hDC句柄进行绘图操作
	CvvImage cimgsrc;
	cimgsrc.CopyOf(SrcImg);
	//将图像显示到IDC_ShowImgSrc控件上
	CRect rectsrc;
	GetDlgItem(IDC_ShowSrcImg)->GetClientRect(&rectsrc);
	cimgsrc.DrawToHDC(hDCSrc, &rectsrc);
	// 释放
	ReleaseDC(pDCSrc);
}


  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值