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

来源:互联网 发布:中国真实gdp数据 编辑:程序博客网 时间:2024/05/16 19:08
//打开文件夹选择图片(一张)    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字符串
  两者没有默认转换
解决方法,需要在:项目-项目属性——配置属性——常规——项目默认值——字符集里面改为”使用多字节字符集“。

0 0
原创粉丝点击