首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在矩阵上赋值

在矩阵上赋值
EN

Stack Overflow用户
提问于 2016-10-21 20:51:38
回答 1查看 90关注 0票数 0

我遇到了c++的问题。我的想法是用预定义的摄像机校准值填充一个固有的矩阵,但我似乎没有正确地完成它。

代码语言:javascript
复制
Mat intrinsic_Matrix(3,3, CV_64F);
float fx = (4032 * 4)/6.69; //2410.76
float fy = (3024 * 4)/5.55; //2179.45

    float cx = 2016.0;
    float cy = 1512.0;

    cout << intrinsic_Matrix << endl;

    cout << endl;

    intrinsic_Matrix.at<float>(0,0) = fx;
    intrinsic_Matrix.at<float>(0,1) = 0.0;
    intrinsic_Matrix.at<float>(0,2) = cx;

    intrinsic_Matrix.at<float>(1,0) = 0.0;
    intrinsic_Matrix.at<float>(1,1) = fy;
    intrinsic_Matrix.at<float>(1,2) = cy;

    intrinsic_Matrix.at<float>(2,0) = 0.0;
    intrinsic_Matrix.at<float>(2,1) = 0.0;
    intrinsic_Matrix.at<float>(2,2) = 1.0;

    cout << intrinsic_Matrix << endl;
    calibrateCamera(frameWorldPoints, bothImagePoints, cvSize(referimages[0].image.cols, referimages[0].image.rows), intrinsic_Matrix, distortion_coeffs, rvecs, tvecs, CV_CALIB_USE_INTRINSIC_GUESS);

这两种打印的输出没有什么意义。看起来我在看指针值或未初始化的值。另外,当我试图校准它时,opencv会抛出一个“内在矩阵不正确”的异常,所以我确信它不是我打印的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-21 21:38:42

你用64F初始化垫子,但使用浮点数。要么改为32F,如下所示

代码语言:javascript
复制
Mat intrinsic_Matrix(3,3, CV_32F);
float fx = (4032 * 4)/6.69; //2410.76
float fy = (3024 * 4)/5.55; //2179.45

    float cx = 2016.0;
    float cy = 1512.0;

    cout << intrinsic_Matrix << endl;

    cout << endl;

    intrinsic_Matrix.at<float>(0,0) = fx;
    intrinsic_Matrix.at<float>(0,1) = 0.0;
    intrinsic_Matrix.at<float>(0,2) = cx;

    intrinsic_Matrix.at<float>(1,0) = 0.0;
    intrinsic_Matrix.at<float>(1,1) = fy;
    intrinsic_Matrix.at<float>(1,2) = cy;

    intrinsic_Matrix.at<float>(2,0) = 0.0;
    intrinsic_Matrix.at<float>(2,1) = 0.0;
    intrinsic_Matrix.at<float>(2,2) = 1.0;

    cout << intrinsic_Matrix << endl;
    calibrateCamera(frameWorldPoints, bothImagePoints, cvSize(referimages[0].image.cols, referimages[0].image.rows), intrinsic_Matrix, distortion_coeffs, rvecs, tvecs, CV_CALIB_USE_INTRINSIC_GUESS);

将所有变量更改为双倍,将intrinsic_matrix初始化为64F

代码语言:javascript
复制
Mat intrinsic_Matrix(3,3, CV_64F);
double fx = (4032 * 4)/6.69; //2410.76
double fy = (3024 * 4)/5.55; //2179.45

double cx = 2016.0;
double cy = 1512.0;

cout << intrinsic_Matrix << endl;

cout << endl;

intrinsic_Matrix.at<double>(0,0) = fx;
intrinsic_Matrix.at<double>(0,1) = 0.0;
intrinsic_Matrix.at<double>(0,2) = cx;

intrinsic_Matrix.at<double>(1,0) = 0.0;
intrinsic_Matrix.at<double>(1,1) = fy;
intrinsic_Matrix.at<double>(1,2) = cy;

intrinsic_Matrix.at<double>(2,0) = 0.0;
intrinsic_Matrix.at<double>(2,1) = 0.0;
intrinsic_Matrix.at<double>(2,2) = 1.0;

cout << intrinsic_Matrix << endl;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40185264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档