opencv摄像机标定之findChessboardCorners问题

Yarten 2016-04-09 10:16:49
函数findChessboardCorners中,为什么传进去的vector<Point2f> corners,出来后它的size老是不对劲呢?(为2亿多,而且里边的数据完全不对),导致后边程序都走不下去。
...全文
6068 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ai智享 2019-07-03
  • 打赏
  • 举报
回复
我也是这种情况:神了
===================
我也遇到这个问题,vector<Point2f> corners维数很大其实是函数没有执行成功,返回的数据也是有问题的,我改成在Release模式下可以正常检测到角点,但是debug模式下程序执行依然不成功,不知道有没有大神可以解答下?
qq_安雍 2018-10-10
  • 打赏
  • 举报
回复
感谢@小明miss小黎,解决了!
lingzesoft 2017-09-18
  • 打赏
  • 举报
回复
这是vector容器的bug, 作为DLL函数参数传递时要求编译方式一致。大概原因就是动态申请和释放分别在dll和exe中. opencv的库是debug编译的,调用opencv的程序只能是debug的. 否则就得把opencv整个源码编译到工程里。
NoEdUl 2017-09-08
  • 打赏
  • 举报
回复
引用 8 楼 qq_39908542 的回复:
[quote=引用 2 楼 alexhgm 的回复:] 我也遇到这个问题,vector<Point2f> corners维数很大其实是函数没有执行成功,返回的数据也是有问题的,我改成在Release模式下可以正常检测到角点,但是debug模式下程序执行依然不成功,不知道有没有大神可以解答下?
我听说Debug调试模式没有在Release畅通,是由于底层驱动问题[/quote] debug要生成调试信息 而且不会优化。 当然没有release快。
NoEdUl 2017-09-08
  • 打赏
  • 举报
回复
引用 3 楼 u014121500 的回复:
用findChessboardCorners时总是显示 无法解析的外部符号 "bool __cdecl cv::findChessboardCorners(class cv::_InputArray const &,class cv::Size_<int>,class cv::_OutputArray const &,int)" (?findChessboardCorners@cv@@YA_NABV_InputArray@1@V?$Size_@H@1@ABV_OutputArray@1@H@Z),该符号在函数 _wmain 中被引用
你是debug模式和对应link的库选错了。
Tonykku 2017-09-04
  • 打赏
  • 举报
回复
引用 2 楼 alexhgm 的回复:
我也遇到这个问题,vector<Point2f> corners维数很大其实是函数没有执行成功,返回的数据也是有问题的,我改成在Release模式下可以正常检测到角点,但是debug模式下程序执行依然不成功,不知道有没有大神可以解答下?
我听说Debug调试模式没有在Release畅通,是由于底层驱动问题
小明miss小黎 2017-08-10
  • 打赏
  • 举报
回复
配置的时候没有配置对,如果只是debug 就在 附加依赖项 只添加 opencv_world320d.lib; 而不要添加 opencv_world320.lib; 以前也遇到过!你们可以试一试(本人是vs2015+opencv3.2.0) 添加环境变量 C:\opencv\build\x64\vc14\bin 包含目录 E:\toolh\opencv\build\include;E:\toolh\opencv\build\include\opencv;E:\toolh\opencv\build\include\opencv2; 库目录 E:\toolh\opencv\build\x64\vc14\lib; 附加依赖项 opencv_world320d.lib;
chyguo 2017-08-05
  • 打赏
  • 举报
回复
shit,检测出角点的时候还是有问题的,输出vector的size又不对了
chyguo 2017-08-05
  • 打赏
  • 举报
回复
使用opencv没多久,遇到相同问题了。我直接使用tutorial里面的摄像头标定模块做摄像头的标定。发现运行时跑飞了,遇到的现象与楼主差不多,最后定位到findChessboardCorners函数上。 角点的输出定义为vector<Point2f> pointBuf,在调用之前是个size=0的vector,调用之后发现size完全不对了。 把findChessboardCorners()函数的源代码copy到工程文件里(我使用的是编译好的opencv库),并check了一下代码: bool my_findChessboardCorners(InputArray _image, Size patternSize, OutputArray corners, int flags) { int count = patternSize.area() * 2; std::vector<Point2f> tmpcorners(count + 1); Mat image = _image.getMat(); CvMat c_image = image; imshow("test1", image); waitKey(50); bool ok = cvFindChessboardCorners(&c_image, patternSize, (CvPoint2D32f*)&tmpcorners[0], &count, flags) > 0; if (count > 0) { tmpcorners.resize(count); Mat(tmpcorners).copyTo(corners); } else corners.release(); return ok; } 输出的角点corners(对应点实参 vector<Point2f> pointBuf)在函数体里面没有直接使用,只是在角点检测完之后,把tmpcorners复制到corners里面去了而已,如果没检测到角点就release()。而我使用的是摄像头捕捉模式做标定的,棋盘纸还没拿出来呢,他奶奶的就跑飞了。初步判断是最后的release()出了问题。 稍微看了一下OutputArray 的说明,也没认真研究下去。但是既然定义的是 vector容器,OS自然会release掉,不用在函数里面显示的release,于是把corners.release();这行的代码注释掉了。代码运行无误!!! 总体感觉是OutputArray的输出矩阵的release()函数写得有问题,有时间的时候再仔细check一下。 如有大侠研究出来,欢迎指教!
孙港 2017-05-27
  • 打赏
  • 举报
回复
问题解决了吗? 我现在碰到这个问题了 好烦
阿星202009 2017-01-18
  • 打赏
  • 举报
回复
用findChessboardCorners时总是显示 无法解析的外部符号 "bool __cdecl cv::findChessboardCorners(class cv::_InputArray const &,class cv::Size_<int>,class cv::_OutputArray const &,int)" (?findChessboardCorners@cv@@YA_NABV_InputArray@1@V?$Size_@H@1@ABV_OutputArray@1@H@Z),该符号在函数 _wmain 中被引用
alexhgm 2016-08-29
  • 打赏
  • 举报
回复
我也遇到这个问题,vector<Point2f> corners维数很大其实是函数没有执行成功,返回的数据也是有问题的,我改成在Release模式下可以正常检测到角点,但是debug模式下程序执行依然不成功,不知道有没有大神可以解答下?
韦德隆东强 2016-06-21
  • 打赏
  • 举报
回复
我的是老出错
bool patternfound = findChessboardCorners(Iminput, bordsize, corners,CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE);
	if(patternfound)
		cornerSubPix(Iminput, corners, Size(11, 11), Size(-1, -1),TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1));
	drawChessboardCorners(Imoutput, bordsize, Mat(corners), patternfound);
同问

4,445

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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