opencv cvLoadImage(mPath)通过打开文件读取图片,读不到图片问题

1.IplImage *SrcImg = cvLoadImage(mPath);

刚开始这样报错,显示CString类型无法转换为char *,之后改成下面

IplImage *SrcImg = cvLoadImage((LPSTR)(LPCTSTR)mPath);

但是,通过这句话读不到所在的图片信息,通过绝对路径可以

//IplImage *SrcImg = cvLoadImage("E:\\vslianlian\\VideoPlay\\aaa\\image1.jpg");

之后,通过以下方法,

把unicode字符集的设置去掉,方法是:

项目 -> 属性 -> 配置属性 -> 常规 -> 字符集 由"使用 Unicode 字符集" 改为 "未设置"。

这样,不用通过转换(LPSTR)(LPCTSTR)mPath,不会报错

也可以正常加载出图片了。

TCHAR szFilter[] = _T("image files All Files(*.*)|*.*||");
CFileDialog dlg(TRUE, _T("*.bmp;*.jpg,*.tif"), NULL,
OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY,
szFilter, NULL);
dlg.m_ofn.lpstrTitle = _T("打开图片");
if (dlg.DoModal() != IDOK)
{
return;
}
CString mPath = dlg.GetPathName();
//const char *p = (LPSTR)(LPCTSTR)mPath;
IplImage *SrcImg = cvLoadImage(mPath);
//IplImage *SrcImg = cvLoadImage("E:\\vslianlian\\VideoPlay\\aaa\\image1.jpg");
if (!SrcImg)
return;
CRect rect;
//矩形类
GetDlgItem(IDC_FD_STATIC)->GetClientRect(&rect); //获取bo
CDC *pDC = GetDlgItem(IDC_FD_STATIC)->GetDC();//根据ID获得窗口指针再获取与该窗口关联的上下文指针
HDC hdc = pDC->GetSafeHdc();                      // 获取设备上下文
CvvImage cimg;
cimg.CopyOf(SrcImg);
cimg.DrawToHDC(hdc, &rect);
//输出图像
ReleaseDC(pDC);
cimg.Destroy();
//销毁

出现转换错误的原因

创建一个MFC对话框应用程序(Dialog-based Application),这一步并不难只要按默认设置就可以了;但是有一点要注意:

最下面的“Use Unicode libraries”最好去掉。如果勾选了这个选项,程序代码就会使用16bit的Unicode字符集来编码,但是很多函数虽然使用 char* (ASCII stings) 类型字符,而将字符串从 Unicode 转换到 ASCII 是非常麻烦的。使用 Unicode 在编译时可能会遇到错误




你可能感兴趣的:(opencv)