【发布时间】:2014-08-22 05:04:35
【问题描述】:
我正在尝试使用我的 OpenCV 项目(使用 Ubuntu 14.04LTS、Eclipse CDT Indigo、OpenCV 2.4.9)切换到 Linux。我尝试在 Linux 上运行一些在 Windows 上运行的应用程序,但我遇到了一个奇怪的问题。
我为您提供了简化的代码(为了清楚起见,删除了一些部分)。
#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
图像到calibrate()函数,函数中的参数声明为
Size &imageSize
您可以在代码中看到定义,注释部分显示校准函数的定义(在现实生活中它是单独的 *.h 文件)。
问题是eclipse抛出一个错误,就是没有与此类参数匹配的函数,即Size。这很奇怪,因为在 Windows 中它确实可以正常工作。但是,但是当我尝试像这样重写对函数的调用时:
Size mySize(grayFrame.cols, grayFrame.rows);
calib->calibrate(mySize);
然后它确实有效。这是为什么?此外,我注意到,在查看 Mat 属性时,该 size() 属性被视为 MSize 而不是常规的 cv::Size。但我不明白为什么,这可能是原因。
感谢您的帮助。
【问题讨论】: