打开图片方法通过获取图片路径,可以打开文件夹选择其中一张图片,也可以通过循环得到多张图片,还可以通过打开文件夹获取整个文件夹下的所有图片
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);
}