利用MFC进行打开文件时,需要将文件路径类型为CString转换为从cv::string类型,然后直接就可以有imread读入图片,网上提供的主要有以下几种转换方式:
1、
CString cstr;
string str((LPCTSTR)cstr);
2、
CString cstr;
sring str(cstr.GetBuffer());
3、
CString cstr;
USES_CONVERSION;
string str(W2A(cstr));
经过试验编程部分如下:
CString strPathName;
CFileDialog ccFileDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT,_T("Image files(*.png; *.jpg;*.bmp)|*.png;*.jpg;*.bmp|All files(*.*)|*.*||"), NULL);
if (ccFileDlg.DoModal() == IDOK)
strPathName = ccFileDlg.GetPathName();
string name;
name=(LPCTSTR(strPathName));//方法1
//name = strPathName.GetBuffer(0); //方法2
//USES_CONVERSION;//方法3
//string name(W2A(strPathName));
结果发现,方法1和2出现如下问题,
本文利用的VS2013+OPENCV3.0,最后方法3可以正确运行;
理由是因为CString中是WCHAR,string里是char,类型不匹配;CString实际是CStringT, 也就是模板类, 它在UNICODE环境下, 实际是CStringW, 而在多字符集下是CStringA,而std::string就是多字符集的.具体见原帖
在使用MFC打开文件并结合OpenCV处理时,需要将CString类型的文件路径转换为std::string。文章介绍了三种转换方法,其中方法1和2由于类型不匹配(WCHAR与char)导致问题,而方法3在VS2013和OpenCV3.0环境下成功运行。转换的关键在于理解CString在不同环境下的表现,以及它与std::string的字符类型差异。
460

被折叠的 条评论
为什么被折叠?



