//打开文件夹选择图片(一张)
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);
const char *tmp = tempName.c_str(); //const位于*左边,则const用来修饰指针所指向的变量
if((src = cvLoadImage(tmp, 1)) == 0) //读图失败
return;
//打开文件夹选择多张图片
TCHAR szFilter[] = _T("JPEG文件(*.jpg)|*.jpg|bmp文件(*.bmp)|*.bmp||");
//文件类型说明和扩展名间用 | 分隔,每种文件类型间用 | 分隔,末尾用 || 指明。
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();
while (pos != NULL)
{
int nCount = 0;
string szPathName = fileDlg.GetNextPathName(pos);
//CString CFileDialog::GetNextPathName( POSITION& pos ) 对于选择了多个文件的情况得到下一个文件位置,并同时返回当前文件名。但必须已经调用过POSITION CFileDialog::GetStartPosition( )来得到最初的POSITION变量。
TRACE( _T("%s/n"), szPathName);
nCount++;
Mat imgg=imread(szPathName);
imgs.push_back(imgg);
}
可能出现错误:“类型转换”: 无法从“CString”转换为“const std::string”
string是C++字符串
CString是MFC字符串
两者没有默认转换
解决方法,需要在:项目-项目属性——配置属性——常规——项目默认值——字符集里面改为”使用多字节字符集“。