opencv2.4.9调用imread()函数,无法传递地址指针

sz-lcw 2014-08-10 09:04:37
为了调试opencv,我自己用CMake生成的vs2010的工程,并编译了动态链接库。设置了相关路径后。在debug模式下可以跟踪到源代码当中去,但是,调用imread()函数时无法传递地址指针。
原函数Mat imread( const string& filename, int flags ) 的filename显示为:<错误的指针>
网上说的 库关联的问题。也就是在Debug模式下应该选择带'd'的lib,在Release模式下就选择不带'd'的lib。我检查过了,配置是对的。但问题依然存在,而在Release模式下,则可以正常运行。
求助这是怎么回事?
我不明白啊,明明就是个实参传递给形参的问题而已,怎么就传递不成功呢!
...全文
228 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiter 2014-08-12
  • 打赏
  • 举报
回复
问题解决了,那我来接分分
sz-lcw 2014-08-11
  • 打赏
  • 举报
回复
引用 3 楼 lx624909677 的回复:
把代码发上来看看,还有Debug模式下的附加依赖项的内容
代码很简单,就是个测试代码而已: 在main函数里调用: namedWindow("temp"); imread("E:\\test\\lena.jpg"); 以上两个函数都是无法传递参数。 Debug模式下的附加依赖项: opencv_calib3d249d.lib opencv_contrib249d.lib opencv_core249d.lib opencv_features2d249d.lib opencv_flann249d.lib opencv_gpu249d.lib opencv_highgui249d.lib opencv_imgproc249d.lib opencv_legacy249d.lib opencv_objdetect249d.lib opencv_ts249d.lib opencv_video249d.lib opencv_nonfree249d.lib opencv_ocl249d.lib opencv_photo249d.lib opencv_stitching249d.lib opencv_superres249d.lib opencv_videostab249d.lib
lx624909677 2014-08-11
  • 打赏
  • 举报
回复
把代码发上来看看,还有Debug模式下的附加依赖项的内容
relaxisland 2014-08-11
  • 打赏
  • 举报
回复
引用 7 楼 szlcw1 的回复:
谢谢答题的各位。 终于自己把问题给找出来了,原来是环境变量path设置的问题。原来用的是OpenCV自带的库,改为自己编译的库的时候,直接添加了环境变量path,没有将原来的删除。 估计是由于这样,导致编译器调用库时出现错误。
原来如此! 想了半天,都觉得怎么可能会这样
sz-lcw 2014-08-11
  • 打赏
  • 举报
回复
谢谢答题的各位。 终于自己把问题给找出来了,原来是环境变量path设置的问题。原来用的是OpenCV自带的库,改为自己编译的库的时候,直接添加了环境变量path,没有将原来的删除。 估计是由于这样,导致编译器调用库时出现错误。
赵4老师 2014-08-11
  • 打赏
  • 举报
回复
Mat imread( const string& filename, int flags );
Mat m;

m.imread(string("d:\\mydir\\abc.bmp"),flags);

string fn1=“d:\\mydir\\abc.bmp”;
m.imread(fn1,flags);

string fn2;
fn2="d:\\mydir\\abc.bmp";
m.imread(fn2,flags);
总有一款适合你。
lx624909677 2014-08-11
  • 打赏
  • 举报
回复
引用 4 楼 szlcw1 的回复:
[quote=引用 3 楼 lx624909677 的回复:] 把代码发上来看看,还有Debug模式下的附加依赖项的内容
代码很简单,就是个测试代码而已: 在main函数里调用: namedWindow("temp"); imread("E:\\test\\lena.jpg"); 以上两个函数都是无法传递参数。 Debug模式下的附加依赖项: opencv_calib3d249d.lib opencv_contrib249d.lib opencv_core249d.lib opencv_features2d249d.lib opencv_flann249d.lib opencv_gpu249d.lib opencv_highgui249d.lib opencv_imgproc249d.lib opencv_legacy249d.lib opencv_objdetect249d.lib opencv_ts249d.lib opencv_video249d.lib opencv_nonfree249d.lib opencv_ocl249d.lib opencv_photo249d.lib opencv_stitching249d.lib opencv_superres249d.lib opencv_videostab249d.lib [/quote] 这样写编译器的错误提示是什么
sz-lcw 2014-08-10
  • 打赏
  • 举报
回复
发现只要形参是 const string& 类型的就无法正确传递参数给函数,这是什么原因呢?如:namedWindow("temp");都是无法正常传递的。。。
sz-lcw 2014-08-10
  • 打赏
  • 举报
回复
更进一步对比发现: 采用cvLoadImage()函数可以正常传递地址指针。 两个函数的原型是: cvLoadImage( const char* filename, int iscolor )和 Mat imread( const string& filename, int flags ) 在参数传递上,一个是const char* filename ,一个是const string& filename, 是否与这个有关?

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧