Linux下的OpenCV:无法获取Mat size (cv:: size),只返回MSize
OpenCV in Linux: cannot obtain Mat size (cv::Size), returns only MSize
我正试图用我的OpenCV项目切换到Linux(使用Ubuntu 14.04LTS, Eclipse CDT Indigo, OpenCV 2.4.9)。我尝试在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
image用于校准()函数,函数中的参数声明为
Size &imageSize
您可以在代码中看到定义,注释部分揭示了校准函数的定义(在实际生活中它是单独的*.h文件)。
问题是eclipse抛出了一个错误,没有与这些参数匹配的函数,即Size。这很奇怪,因为在Windows中它确实工作得很好。但是,当我尝试像这样重写对函数的调用时:
Size mySize(grayFrame.cols, grayFrame.rows);
calib->calibrate(mySize);
那么它确实工作。为什么呢?此外,我注意到,当通过Mat属性查看时,该size()属性被视为MSize而不是常规cv:: size。但我不明白为什么,这可能就是原因。
我在Linux上尝试了这个,我得到
错误:cv类型的非const引用初始化无效::Size&{也称为cv::Size_&}'从类型为'cv::Size'的右值
这基本上说明@Arelius链接到副本是正确的。
修改
double calibrate(Size &imageSize)
double calibrate(const Size &imageSize)
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 大于65535的C++数组[size]引发不一致的溢出
- 为什么(-1)%vector::size()总是返回0
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 概念中的cv限定符需要表达式参数列表
- 将CHW格式的浮点向量转换为cv::Mat
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 错误的cv::face FacemarkLBF实例化
- 如何检查给定的参数是否为 cv::noArray()?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- vector.size() 在比较中意外工作
- 如何在 opencv 中使用 cv::VideoCapture::waitAny()
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- Visual Studio 2015 OpenCV Assertion 在 cv::imshow windows 中失败 (size.width>0 && size.height>0.cp
- 如何加入多个(超过4个)' CV::Mat ' images ' Size(M, N), CV_8UC1 '到一
- Linux下的OpenCV:无法获取Mat size (cv:: size),只返回MSize
- 错误 C2664: 'cv::Mat::Mat(int,int,int)' : 无法将参数 1 从 'cv::Size' 转换为 'int'