Linux中的OpenCV:无法获取Mat大小(cv :: Size),只返回MSize

时间:2014-07-01 15:07:37

标签: c++ linux eclipse opencv

我正在尝试使用我的OpenCV项目切换到Linux(使用Ubuntu 14.04LTS,Eclipse CDT Indigo,OpenCV 2.4.9)。我尝试在Linux上运行我的一些应用程序,但我遇到了一个奇怪的问题。

我为您提供了简化代码(为清晰起见,删除了一些部分)。

#include <iostream>
#include "opencv2/opencv.hpp"
#include "PointGrayCap.h"
#include "CameraCalibrator.h"

#define CALIB_FRAMES 5

using namespace std;
using namespace cv;

int main() {

VideoCapture cam(1);
CameraCalibrator* calib = new CameraCalibrator(Size(9, 6), 0, true);
Mat image, grayFrame, cornerFrame;
bool stop = false; int counter = 0;
bool calibDone = false;

while (!stop) {
    if (!cam.read(image)) {
        break;
    }
    imshow("Color", image);
    cvtColor(image, grayFrame, CV_BGR2GRAY);

    calib->calibrate(grayFrame.size()); // <<<<<<< issue is here with this parameter.

    //calibrate function is defined as:
    /*
    double calibrate(Size &imageSize)
    {
    //Output rotations and translations
    vector<Mat> rotVecs, transVecs;
    // start calibration
    return calibrateCamera(objectPoints, // the 3D points
                           imagePoints, // the image points
                           imageSize, // image size
                           cameraMatrix, // output camera matrix
                           distCoeffs, // output distortion matrix
                           rotVecs, // Rs
                           transVecs, // Ts
                           flag); // set options
    }
    */
    //

    cout << "Calibration done." << endl;
    calib->outputCameraMatrix();

    if (waitKey(10) == 27) {stop = true;}
}

return 0;
}

在这里,我应该传递

的大小
grayFrame 

image to calibrate()函数,函数中的参数声明为

Size &imageSize

你可以在代码中看到定义,评论部分显示校准功能的定义(在现实生活中它是单独的* .h文件)。

问题是eclipse会抛出一个错误,即没有与这些参数匹配的函数,即Size。这很奇怪,因为在Windows中它确实可以正常工作。但是,当我尝试重写对此函数的调用时:

Size mySize(grayFrame.cols, grayFrame.rows);
calib->calibrate(mySize);

然后就可以了。这是为什么?此外,我注意到,当通过Mat属性查看时,size()属性被视为MSize而不是常规的cv :: Size。但我无法理解为什么这可能是原因。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我在Linux上尝试了这个,我得到了

  

错误:类型&#39; cv :: Size&amp;的非const引用的初始化无效{aka cv :: Size_&amp;}&#39;来自类型&#39; cv :: Size&#39;

的右值

这几乎说@Arelius链接到副本是正确的。

解决问题更改

double calibrate(Size &imageSize)

double calibrate(const Size &imageSize)