opencv显示图片地址问题

来源:互联网 发布:用js写一个下拉菜单 编辑:程序博客网 时间:2024/05/16 00:30

前段时间写一个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的一些函数比较老,所以只能显示单字符的字符串,但是用文件框获取的地址是双字符的字符串,所以就会存在显示不了的问题,因为“\\”会被转化成“\”。所以用一种合理的转化方法就可实现图片显示,强制转换会出现地址混乱,成功不了。

原创粉丝点击