MFC打开图片

9 篇文章 3 订阅

打开图片方法通过获取图片路径,可以打开文件夹选择其中一张图片,也可以通过循环得到多张图片,还可以通过打开文件夹获取整个文件夹下的所有图片

1.打开文件夹选择多张图片

void Ocr::OnBnClickedButtonOpenpic()
{
	TCHAR szFilter[] = _T("bmp文件(*.bmp)|*.bmp|JPEG文件(*.jpg)|*.jpg||");
	//文件类型说明和扩展名间用 | 分隔,每种文件类型间用 | 分隔,末尾用 || 指明。
	CFileDialog fileDlg(TRUE, NULL, NULL, OFN_ALLOWMULTISELECT, szFilter, this);

	//CFileDialog构造一个CFileDialog对象
	/*
	第1个参数:TRUE为打开文件对话框;FALSE为保存文件对话框
	2:  指定默认的文件扩展名。
	3:指定默认的文件名。
	4:指明一些特定风格。
	5:是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。
	6:为父窗口指针。
	*/

	if (fileDlg.DoModal() != IDOK)     //没有点确定按钮
		return;
	POSITION pos = fileDlg.GetStartPosition();

    //POSITION就是MFC的迭代器(iterator),
    //GetStartPosition是取第一个迭代器,
    //GetNextAssoc是取出当前元素然后向后移动迭代器

	while (pos != NULL)
	{
		int nCount = 0;
		CString szPathName = fileDlg.GetNextPathName(pos);
		//CString CFileDialog::GetNextPathName( POSITION& pos ) 对于选择了多个文件的情况得到下一个文件位置,并同时返回当前文件名。但必须已经调用过POSITION CFileDialog::GetStartPosition( )来得到最初的POSITION变量。
		TRACE(_T("%s/n"), szPathName);
		nCount++;
		
		//CString转string
		USES_CONVERSION;
		string ss(W2A(szPathName));
        
        //Mat为OpenCV类,将图片保存到vector<Mat> imgs容器中
		Mat imgg = imread(ss);
		imgs.push_back(imgg);
        
        //将图片路径更新到edit控件中
		m_edit0.SetSel(-1);//选择编辑框正文
		m_edit0.ReplaceSel(szPathName + ";");
		//m_edit1.SetWindowTextA(szPathName);
		//UpdateData(false);
			
	}
}

效果如图所示:

2.打开单张图片(也可通过1介绍的只选择一张图片)

void Ocr::OnBnClickedButtonOpenpic()
{
	
	// TODO: 在此添加控件通知处理程序代码
	
	CString fileName;
	TCHAR szFilter[] = _T("JPEG文件(*.jpg)|*.jpg|GIF文件(*.gif)|*.gif|bmp文件(*.bmp)|*.bmp||");
	CFileDialog fileDlg(TRUE, _T("jpg"), NULL, 0, szFilter, this);

	if (fileDlg.DoModal() != IDOK)     //没有点确定按钮,返回
	return;

	fileName = fileDlg.GetPathName();
	string tempName = (LPCSTR)CStringA(fileName);

	Mat imgg = imread(tempName);
	imgs.push_back(imgg);

	m_edit0.SetWindowText(fileName);
        UpdateDate(false);
}

 

 

  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Visual Studio 2022中使用MFC和OpenCV打开图片,你需要按照以下步骤进行操作: 1. 首先,确保你已经在Visual Studio 2022中安装了MFC和OpenCV库。你可以从官方网站下载并安装它们。 2. 在你的项目中创建一个新的MFC应用程序,并选择对话框作为应用程序类型。 3. 在对话框上添加一个按钮控件,并给它一个适当的标识符。 4. 双击按钮,调用按钮的点击事件处理程序。 5. 在事件处理程序中,添加代码以打开图片。你可以使用OpenCV的cv::imread函数来加载图片。例如,你可以使用以下代码: ```cpp CString strImagePath; // 图片路径 CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, _T("Image Files (*.bmp; *.jpg; *.png)|*.bmp;*.jpg;*.png||")); // 打开文件对话框 if (dlg.DoModal() == IDOK) { strImagePath = dlg.GetPathName(); // 获取选择的图片路径 // 使用OpenCV加载图片 cv::Mat image = cv::imread(CT2CA(strImagePath)); if (!image.empty()) { // 将图片显示在对话框上的图片控件中 CImage img; img.Attach(image.data, image.cols, image.rows, image.step, image.elemSize()); CRect rect; GetDlgItem(IDC_STATIC_IMAGE)->GetClientRect(rect); img.Draw(GetDlgItem(IDC_STATIC_IMAGE)->GetDC(), rect); } } ``` 上述代码中,我们首先打开一个文件对话框以选择要加载的图片。然后,使用OpenCV的cv::imread函数加载选择的图片。如果成功加载了图片,我们将其显示在对话框上的一个图片控件中。 6. 运行程序,点击按钮选择要打开图片。选择的图片将在对话框中显示出来。 通过以上步骤,你可以在Visual Studio 2022中使用MFC和OpenCV打开图片。记得在代码中添加适当的错误处理机制,以确保图片能够成功加载和显示。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值