opencv错误:当我校准相机时,convert.cpp(opencv)中的断言失败
opencv error: assertion failed in convert.cpp (opencv) when I calibrate a camera
我试图校准相机(opencv 2.3.1、VS 2010和Windows 7),但当我编译程序时,出现了一个opencv错误,即
"断言失败:<src.size==dst.size&;src.channels<gt;dst.通道<gt>在未知函数中,文件。。。。modules\core\src\convert.cpp,第1277行";。
这里是代码的一部分,
CvMat* image_points = cvCreateMat(n_boards*board_total,2,CV_32FC1);
CvMat* object_points = cvCreateMat(n_boards*board_total,3,CV_32FC1);
CvMat* point_counts = cvCreateMat(n_boards,1,CV_32SC1);
CvMat* intrinsic_matrix = cvCreateMat(3,3,CV_32FC1);
CvMat* distortion_coeffs = cvCreateMat(4,1,CV_32FC1);
for ( int ig = 0; ig< n_boards; ig++ )
{
image= cvLoadImage(names[ig],CV_LOAD_IMAGE_COLOR); // load image
cvNamedWindow("imageessai", 1);
cvShowImage("imageessai", image);
cvWaitKey(0);
cvDestroyWindow("imageessai");
for (int ik=0; ik<n_boards; ik++)
{
int found = cvFindChessboardCorners(image, board_sz, corners, &corner_count,CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FILTER_QUADS );
cvFindCornerSubPix(gray_image, corners, corner_count, cvSize(11,11),cvSize(-1,-1), cvTermCriteria( CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 30, 0.1 ));
cvDrawChessboardCorners(image, board_sz, corners, corner_count, found);
if( corner_count == board_total )
{
step= ig*board_total;
for( int i=step,j=0 ; j<board_total; j++, i++)
{
CV_MAT_ELEM(*image_points, float,i,0) = corners[j].x;
CV_MAT_ELEM(*image_points, float,i,1) = corners[j].y;
CV_MAT_ELEM(*object_points,float,i,0) = (float) j/board_w;
CV_MAT_ELEM(*object_points,float,i,1) = (float) (j%board_w);
CV_MAT_ELEM(*object_points,float,i,2)=0.0f;
}
CV_MAT_ELEM (*point_counts, int,ig,0) = board_total;
printf("n %d successful Snapshots out of %d collected.n",ig+1,n_boards);
}
}
CvMat* object_points2 = cvCreateMat(n_boards*board_total,3,CV_32FC1);
CvMat* image_points2 = cvCreateMat(n_boards*board_total,2,CV_32FC1);
CvMat* point_counts2 = cvCreateMat(n_boards,1,CV_32SC1);
for(int i = 0; i<n_boards*board_total; ++i)
{
CV_MAT_ELEM( *image_points2, float, i, 0) =CV_MAT_ELEM( *image_points, float, i, 0);
CV_MAT_ELEM( *image_points2, float,i,1) =CV_MAT_ELEM( *image_points, float, i, 1);
CV_MAT_ELEM(*object_points2, float, i, 0) = CV_MAT_ELEM(*object_points, float, i,0) ;
CV_MAT_ELEM( *object_points2, float, i, 1)= CV_MAT_ELEM(*object_points, float, i,1) ;
CV_MAT_ELEM( *object_points2, float, i, 2)= CV_MAT_ELEM(*object_points, float, i,2) ;
}
for(int i=0; i<n_boards; ++i)
{
CV_MAT_ELEM( *point_counts2, int, i, 0)=CV_MAT_ELEM(*point_counts,int,i,0);
}
cvReleaseMat(&object_points);
cvReleaseMat(&image_points);
cvReleaseMat(&point_counts);
CV_MAT_ELEM( *intrinsic_matrix, float, 0, 0 ) = 1.0f;
CV_MAT_ELEM( *intrinsic_matrix, float, 1, 1 ) = 1.0f;
CvMat* rvec = cvCreateMat(n_boards,3,CV_32F);//matrice de rotation
CvMat* tvec = cvCreateMat(n_boards,3,CV_32F);//matrice de translation
CvMat* H = cvCreateMat(1,3,CV_32FC1);
cvCalibrateCamera2(object_points2, image_points2, point_counts2, sizeim, intrinsic_matrix, distortion_coeffs, rvec, tvec,0 );
cvFindHomography(object_points2,image_points2,H,0,3,NULL);
我试过很多次解决这个问题,我需要帮助。
(我打开我的评论作为回答,因为Nabiha可能无法用1个代表回答评论。)
似乎您将错误类型(错误通道数)的图像传递给了其中一个cv函数。根据你的描述,这很难说,但我猜它发生在cvCalibrateCamera2或cvFindHomograpy中。
断言听起来也像是一个运行时错误,而不是复杂的时间错误。
如果是运行时错误,您必须检查传递给这些函数的图像是否具有正确的设置(通道、相同大小等)。这是编译器无法为您检查的,因为这些参数是动态的。
您可以有条不紊地对一些函数进行注释(以调试代码),并查看程序是否仍然有效,以防您在使用调试器查找代码的确切中断位置时遇到困难。一旦您隔离了呼叫,请查看文档,了解它对您的图像参数的期望,您应该能够正确解决这一问题。
校准是一个多步骤的过程(获取图像、提取特征、计算单应性、计算内、外相机参数)。它也很难理解(数学方面),所以不要放弃。OpenCV校准功能通常工作得很好。
调试按钮未激活,解决方案项目的重新扫描按钮也未激活,因此我无法编译或调试程序samples\cpp\ccalibration.cpp
相关文章:
- 创建 OpenCV 非自由版本 v4.3 时出错,可折叠.cpp错误 C2039、2605
- OpenCV 错误:相机校准:断言在matrix_wrap.cpp失败
- Opencv cpp 使用多线程处理同一视频的不同部分
- OpenCV 致命错误,同时编译带有 openmp 和 opencv 库的 cpp 文件
- 在Java项目中使用CPP和OpenCV项目的.so文件
- 如何在Eclipse opencv cpp (c ++)上创建.so文件
- OPENCV- HYBRIDTRACKINGSPAMPE.CPP样本上的错误
- OpenCV: grabcut.cpp error
- 断言失败<dst.data != src.data >在未知函数中。/../ocv/opencv/modules/imgproc/src/imgwarp.cpp
- opencv错误:当我校准相机时,convert.cpp(opencv)中的断言失败
- 在函数中传递参数 - OpenCV & Cpp
- cpp中基于FFT的图像配准(可选使用OpenCV)
- 如何在样本中使用opencv的calibration.cpp(ubuntu opencv 2.4.12)
- OpenCV错误:断言失败,mat.cpp第537行
- 收到 OpenCV 错误:运行 OpenCV 示例程序时内存不足:"stitching_detailed.cpp"
- 编译一个使用Opencv的cpp文件
- Train_hog.cpp OpenCV 3.1 示例 - 无法传递正确的路径参数
- Android+OpenCV:如何向项目添加.cpp文件
- 混合CPP OpenCV /主程序C
- 使用 cpp 在 opencv 中的 xml 文件中追加元素