寻找相机和失真矩阵美国cc CalibrateCamera 2()

时间:2013-06-13 05:32:22

标签: opencv camera-calibration calibration

我试图使用cvCalibrateCamera2找出相机矩阵和失真系数。没有编译错误,但是当我尝试执行程序时,它会给出:

  

OpenCV错误:cvConvertPointsHomogenous中的输入参数大小不匹配(两个矩阵必须具有相同的点数),文件/build/buildd/opencv-2.3.1/modules/calib3d/src/fundam.cpp

矩阵存储对象点的大小为4 x 3,矩阵存储图像点的大小为4 X2,可能出错?

现在我对代码进行了一些更改。 这是我正在使用的代码:

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/calib3d/calib3d.hpp"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//function to call cvCalibrateCamera2()
void calibrate(CvMat* object_points, CvMat* image_points, CvMat* intrinsic,CvMat* distortion)
{
const int point_count= object_points->rows;
const int image_count=object_points->rows/point_count;
CvMat* const full_object_points = cvCreateMat(image_count*point_count,3,CV_32FC1);
CvMat* const point_counts= cvCreateMat(image_count,1,CV_32SC1);
for(int i =0; i<image_count;i++)
{
CV_MAT_ELEM(*point_counts,float , i,0)= point_count;
    for(int j=0;j<point_count;j++)
    {
        for(int k=0; k<3;k++){
        CV_MAT_ELEM(*full_object_points,float,i*point_count+j,k)=CV_MAT_ELEM(*object_points,float,j,k);
        }
    }
}
cvCalibrateCamera2(full_object_points,image_points,point_counts,cvSize(1,1),intrinsic, distortion,NULL,NULL,0);
}
int main()
{
const float points[][2]={{1,2},{0,0},{3,5},{5,2}};
const int image_count=5;
const int point_count=sizeof(points)/sizeof(points[1]);
CvMat* const object_points=cvCreateMat(point_count,3,CV_32FC1);
for(int i=0; i<point_count;i++)
{
CV_MAT_ELEM(*object_points, float, i,0)=points[i][0];
CV_MAT_ELEM(*object_points, float, i,1)=points[i][1];
CV_MAT_ELEM(*object_points, float, i,2)=0;
}
CvMat* const image_points=cvCreateMat(image_count*point_count,2,CV_32FC1);
CvMat* const intrinsic=cvCreateMat(3,3,CV_32FC1);
CvMat* const distortion=cvCreateMat(5,1,CV_32FC1);
calibrate(object_points,image_points,intrinsic,distortion);
}

执行时我收到以下错误:

  

OpenCV错误:cvReshape文件/build/buildd/opencv-2.3.1/modules/core/src/array.cpp中的错误参数(矩阵元素的总数不能被新的行数整除),第2755行   在抛出'cv :: Exception'的实例后终止调用     what():/build/buildd/opencv-2.3.1/modules/core/src/array.cpp:2755:错误:( - 5)矩阵元素的总数不能被函数中的新行数整除cvReshape

     

中止(核心倾销)

1 个答案:

答案 0 :(得分:0)

错误消息的确切含义。它需要与对象相同的点数和图像点数。如果您尝试使用10组图像点进行计算,但使用9组对象点,则会返回此错误。

我建议使用c ++ openCV,因为它接受带有点和矩阵作为输入的向量。检查这些矢量的长度比矩阵容易得多。