您的位置:首页 > 运维架构

MFC+opencv打开文件夹选择单张或多张图片

2016-07-20 17:24 615 查看
//打开文件夹选择图片(一张)
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字符串

  两者没有默认转换

解决方法,需要在:项目-项目属性——配置属性——常规——项目默认值——字符集里面改为”使用多字节字符集“。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息