opencv显示图片地址问题
2013-09-03 21:54
295 查看
前段时间写一个c++的项目,用到了opencv的loadimage方法显示图片,但是遇到了一个很痛苦的问题,那就是我用一个cstring对象存储GetPathName()获取的地址后,再用DrawPicToHDC显示图片是怎么也显示不出来,网上找了很多方法都没有成功,浪费了很多时间,现在终于解决了这个问题,为了不让自己以后再陷入这个坑,也为了帮助遇到同样问题的朋友,我觉得非常有必要记载以下这个问题的解决方法。
先贴上代码~
void CMFCApplication3Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
// 设置过滤器
TCHAR szFilter[] = _T("JPEG文件(*.jpg)|*.jpg|BMP文件(*.bmp)|*.bmp|PNG文件|*.png|所有格式(*.*)");
// 构造打开文件对话框
CFileDialog dlg(TRUE, NULL, NULL, 0, szFilter, this);
//定义一个用来存文件地址的字符串
CString strFilePath;
// 显示打开文件对话框
if (IDOK == dlg.DoModal())
{
// 如果点击了文件对话框上的“打开”按钮,则将选择的文件路径显示到编辑框里
strFilePath = dlg.GetPathName();
//网上有人说的一种replace方法,但是尝试了即便发现没有用完全
//strFilePath.Replace(_T("\\"),_T("\\\\"));
//一种转化方法,也是没有用
//char* strpath = (char*)strFilePath.GetBuffer(0);
//一种用字符代替的方法,会报错
// str[]="d:\\11.jpg";
//正确的方法来啦!!!用一种字符转换,将双字符转化为单字符,绝对有用的方法,成功就靠此法
USES_CONVERSION;
char * strpath = T2A(strFilePath);
SetDlgItemText(IDC_EDIT1,strFilePath);
SetDlgItemText(IDC_EDIT2,strFilePath);
IplImage *image=NULL; //原始图像
if(image) cvReleaseImage(&image);
image = cvLoadImage(strpath,1); //显示图片
DrawPicToHDC(image, IDC_PIC04_STATIC);
DrawPicToHDC(image, IDC_PIC05_STATIC);
}
}
解释一下,因为好像opencv的一些函数比较老,所以只能显示单字符的字符串,但是用文件框获取的地址是双字符的字符串,所以就会存在显示不了的问题,因为“\\”会被转化成“\”。所以用一种合理的转化方法就可实现图片显示,强制转换会出现地址混乱,成功不了。
先贴上代码~
void CMFCApplication3Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
// 设置过滤器
TCHAR szFilter[] = _T("JPEG文件(*.jpg)|*.jpg|BMP文件(*.bmp)|*.bmp|PNG文件|*.png|所有格式(*.*)");
// 构造打开文件对话框
CFileDialog dlg(TRUE, NULL, NULL, 0, szFilter, this);
//定义一个用来存文件地址的字符串
CString strFilePath;
// 显示打开文件对话框
if (IDOK == dlg.DoModal())
{
// 如果点击了文件对话框上的“打开”按钮,则将选择的文件路径显示到编辑框里
strFilePath = dlg.GetPathName();
//网上有人说的一种replace方法,但是尝试了即便发现没有用完全
//strFilePath.Replace(_T("\\"),_T("\\\\"));
//一种转化方法,也是没有用
//char* strpath = (char*)strFilePath.GetBuffer(0);
//一种用字符代替的方法,会报错
// str[]="d:\\11.jpg";
//正确的方法来啦!!!用一种字符转换,将双字符转化为单字符,绝对有用的方法,成功就靠此法
USES_CONVERSION;
char * strpath = T2A(strFilePath);
SetDlgItemText(IDC_EDIT1,strFilePath);
SetDlgItemText(IDC_EDIT2,strFilePath);
IplImage *image=NULL; //原始图像
if(image) cvReleaseImage(&image);
image = cvLoadImage(strpath,1); //显示图片
DrawPicToHDC(image, IDC_PIC04_STATIC);
DrawPicToHDC(image, IDC_PIC05_STATIC);
}
}
解释一下,因为好像opencv的一些函数比较老,所以只能显示单字符的字符串,但是用文件框获取的地址是双字符的字符串,所以就会存在显示不了的问题,因为“\\”会被转化成“\”。所以用一种合理的转化方法就可实现图片显示,强制转换会出现地址混乱,成功不了。
相关文章推荐
- OpenCV问题集锦,图片显示不出来,WaitKey(0),imread()不能读图片,未经处理的异常,等问题集合
- OpenCV问题集锦,图片显示不出来,WaitKey(0),imread()不能读图片,未经处理的异常,等问题集合
- 转换排列Qt中使用OpenCV显示图片时,Mat结构转换为QImage结构的问题
- 服务器图片(绝对地址) 客户端显示问题
- VS2010+opencv2.4.10调试显示Cannot find or open the PDB file出不了图片问题。
- OpenCV【2】---读取png图片显示到QT label上的问题
- Zedboard摄像头获取视频设计问题篇(四)-OpenCV+QT配置显示图片
- opencv的图片显示到控件上坐标转换问题
- OpenCV问题集锦,图片显示不出来,WaitKey(0),imread()不能读图片,未经处理的异常,等问题集合
- 多张图片地址拼接使得无法显示的问题
- 在ios中使用opencv将彩色图片转换成为灰度图,uiimageview无法显示问题
- 知乎上有一个问题“在mfc框架中,有上面方法能直接将opencv2.0库中的Mat格式图片传递到Picture Control”中显示?
- opencv imshow 图片无法显示, 显示不全问题,只出现一部分
- Qt中使用OpenCV显示图片时,Mat结构转换为QImage结构的问题
- OpenCV问题集锦,图片显示不出来,WaitKey(0),imread()不能读图片,未经处理的异常,等问题集合
- opencv 多线程显示imshow出现图片不更新的问题
- Zedboardwebcam设计问题篇(三)-OpenCV+QT配置显示图片
- OpenCV在MFC框架下显示图片问题
- Android开发 json解析包含图片地址无法显示图片的问题
- 超实用,解决img标签src绑定了正确地址后,图片有时候不显示问题