OpenCV 错误 : Bad argument <Unknown array type> in unknown function, 文件 ..\..\..\modules\core\src\matrix.cpp,第 697 行

标签 opencv

我目前正在尝试纠正立体相机以创建视差图。不幸的是,我无法通过立体声校正步骤,因为我一直收到错误

"OpenCV Error: Bad argument in unknown function, file ..\..\..\modules\core\src\matrix.cpp, line 697."

这个过程很复杂,因为我不是校准相机的人,也无法访问用于录制视频的相机。我获得了所有校准参数(内在参数、失真系数、旋转矩阵和平移向量)。如您所见,我尝试将它们直接转换为 CvMats 并以这种方式使用它们,但是当我尝试实际使用它们时出现错误。

提前致谢。

CvMat li, lm, ri, rm, r, t, Rl, Rr, Pl, Pr;    

double init_li[3][3] = 
    {   {477.984984743, 0, 316.17458671}, 
    {0, 476.861945645, 253.45073026}, 
    {0, 0 ,1}   };
double init_lm[5] = {-0.117798518453, 0.147554949385, -0.0549082041898, 0, 0};
double init_ri[3][3] = 
    {{478.640315323, 0, 299.957994781}, 
    {0, 477.898896505, 251.665771947}, 
    {0, 0, 1}};
double init_rm[5] = {-0.10884732532, 0.12118405303, -0.0322073237741, 0, 0};
double init_r[3][3] = 
    {{0.999973709051976, 0.00129700728791757, -0.00713435189275776},
    {-0.00132096594266573, 0.999993501087837, -0.00335452397041856}, 
    {0.00712995468519435, 0.00336386001267643, 0.99996892361313}};
double init_t[3] = {-0.0830973040641153, -0.00062704210860633, 1.4287643345188e-005};

cvInitMatHeader(&li, 3, 3, CV_64FC1, init_li);
cvInitMatHeader(&lm, 5, 1, CV_64FC1, init_lm);
cvInitMatHeader(&ri, 3, 3, CV_64FC1, init_ri);
cvInitMatHeader(&rm, 5, 1, CV_64FC1, init_rm);
cvInitMatHeader(&r, 3, 3, CV_64FC1, init_r);
cvInitMatHeader(&t, 3, 1, CV_64FC1, init_t);
cvInitMatHeader(&Rl, 3,3, CV_64FC1);
cvInitMatHeader(&Rr, 3,3, CV_64FC1);
cvInitMatHeader(&Pl, 3,4, CV_64FC1);
cvInitMatHeader(&Pr, 3,4, CV_64FC1);

//frame is a cv::MAT holding the first frame of the video.
CvSize imageSize = frame.size();
imageSize.width /= 2;

//IT BREAKS HERE
cvStereoRectify(&li, &ri, &lm, &rm, imageSize, &r, &t, &Rl, &Rr, &Pl, &Pr);

最佳答案

所以,您被 c-api 咬伤了吗?你为什么不背对它呢?

尽可能使用 c++ api,请不要从旧的(1.0)、已弃用的 api 开始学习 opencv!

double init_li[9] = 
    {   477.984984743, 0, 316.17458671, 
    0, 476.861945645, 253.45073026, 
    0, 0 ,1  };
double init_lm[5] = {-0.117798518453, 0.147554949385, -0.0549082041898, 0, 0};
double init_ri[9] = 
    {   478.640315323, 0, 299.957994781, 
    0, 477.898896505, 251.665771947, 
    0, 0, 1};
double init_rm[5] = {-0.10884732532, 0.12118405303, -0.0322073237741, 0, 0};
double init_r[9] = 
    {   0.999973709051976, 0.00129700728791757, -0.00713435189275776,
    -0.00132096594266573, 0.999993501087837, -0.00335452397041856, 
    0.00712995468519435, 0.00336386001267643, 0.99996892361313};
double init_t[3] = {-0.0830973040641153, -0.00062704210860633, 1.4287643345188e-005};

cv::Mat li(3, 3, CV_64FC1, init_li);
cv::Mat lm(5, 1, CV_64FC1, init_lm);
cv::Mat ri(3, 3, CV_64FC1, init_ri);
cv::Mat rm(5, 1, CV_64FC1, init_rm);
cv::Mat r, t, Rl, Rr, Pl, Pr; // note: no initialization needed.

//frame is a cv::MAT holding the first frame of the video.
cv::Size imageSize = frame.size();
imageSize.width /= 2;

//IT won't break HERE
cv::stereoRectify(li, ri, lm, rm, imageSize, r, t, Rl, Rr, Pl, Pr);

// no need ever to release or care about anything

关于OpenCV 错误 : Bad argument <Unknown array type> in unknown function, 文件 ..\..\..\modules\core\src\matrix.cpp,第 697 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15468437/

相关文章:

c++ - OpenCV标定麻烦

opencv - Opencv和图像处理:提取车身轮廓

c++ - 将 C 程序更改为 C++ 程序 - 编译错误

python - 从图像中裁剪出互补区域

python - Houghlines 未检测到简单矩形的顶线

opencv - 有没有一种方法可以正确对齐面?

c++ - 使用具有一维输入的 OpenCV cv::kmeans()

python-3.x - 获取每个超像素的RGB像素值列表

c++ - 取一个图像的一部分来创建另一个图像

相机中的 OpenCV 捕获会产生类似噪声的图像