cvLoadImage 被这个函数折腾了半天,也是自己不注意细节的问题!写在这里惊醒大家!
1.首先这个函数第一个参数为加载图片的路径,一直以为把图片放在debug文件夹中,此函数能够找得到图片,可是试了很多次之后,任然读取不到图片,因为之前印象中有过放在debug文件夹中能够读取到,结果是放在debug文件夹中,直接用图片名称做路径是加载不了图片的。
2.在上面一种情况不能加载图片后,我想到了绝对路径,然后直接复制我的电脑上面的地址,如E:\new folder\拣练系统\图片样品\cjy\01.bmp,但是发现任然加载不了图片,因为以前其他地方用路径的时候一直都是这么做的,结果试了半天还是加载不了图片,然后那个崩溃啊,一个这么小的问题竟然搞不定。。。
解决方法:
1.将图片直接放在工程文件夹下面即可,即放在debug同级文件夹。
2.直接用绝对路径的时候,有反斜杠的时候在用两个反斜杠,如E:\\new folder\\拣练系统\\图片样品\\cjy\\01.bmp或者换成E:/new folder/拣练系统/图片样品/cjy/01.bmp,这样绝对路径可读了。
3.
CFileDialog dlg(TRUE,_T("*.bmp"),NULL,OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY,_T("image files(*.bmp) | *.bmp; | All files (*.*) | *.*||)"),NULL);
dlg.m_ofn.lpstrTitle = _T("Open Image"); //打开文件对话框标题名
if (dlg.DoModal() != IDOK) //判断是否获取到图片
{
return;
}
CString mPath = dlg.GetPathName(); //获取图片路径
IplImage* imgTmp = cvLoadImage((LPSTR)(LPCTSTR)mPath,0);//通过这个路径加载图片进来(LPSTR)(LPCTSTR)mPath 0->强制转换读取图像为灰度图 1->读取彩色图
用以上方法读,直接找到需要加载图片的文件夹,但是我调试时看看它的路径名称竟然是下面这个,不要双反斜杠,然后我就有点凌乱了。。。
然后我查了下这个反斜杠与双反斜杠以及斜杠在路径读取中的含义,下面是大牛的解释:
至于上述问题出现的原因,要从字符串解析这方面来分析。学过编程的人都应该知道,在C里面,输出字符串时,如果想输出一个换行,那就要加上'\n'这个标志,类似的,输出一个TAB,就加上'\t',也就是说,反斜杠("\")这个符号会把跟在它后面的字符结合起来转义成其它字符。根据这个原理,如果想输出双引号('"'),就需要输入'\"',这样才会将包含了双引号的字符串正确的写入内存中。那么如果想输入一个反斜杠呢?很简单,只要敲'\\'就可以了。
来源链接:http://blog.sina.com.cn/s/blog_6a2236590100ux1r.html
然后然后这样就可以了,以此祭奠我逝去的时间。。。
附:在此问题查找资料的过程中,看到网友又说图片大不能够载入进去,我用了3.75M的图片能够载入。