将std :: vector复制到相同大小

时间:2018-02-06 18:23:48

标签: c++ opencv

cv :: Mat_上的push_back是否会自动按顺序对数据进行排序?

我正在尝试将矢量值复制到opencv Mat。问题是运行时异常。

Error: (-215) DataType<_Tp>::type == type() && cols == 1 in function push_back

代码

#include <vector>
#include <cmath>
#include <opencv2/core/cvdef.h>
#include <opencv2/core/mat.hpp>
#include <opencv2/imgcodecs.hpp>
#include <iostream>
#include <opencv2/imgproc.hpp>
#include <opencv2/videoio.hpp>
#include <opencv/cv.hpp>


int main ( int argc, char **argv ) {
   cv::Mat_<float> samples_xy(2, 100);
   std::vector<float> xsamples(100,1),ysamples(100,2);
   for ( auto t : xsamples ) {
       samples_xy.push_back(t);
   }
   for ( auto t : ysamples ) {
       samples_xy.push_back(t);
   }
}

1 个答案:

答案 0 :(得分:0)

感谢@BHawk的提示,我正在使用正确的代码完成答案。

#include <vector>
#include <cmath>
#include <opencv2/core/cvdef.h>
#include <opencv2/core/mat.hpp>
#include <opencv2/imgcodecs.hpp>
#include <iostream>
#include <opencv2/imgproc.hpp>
#include <opencv2/videoio.hpp>
#include <opencv/cv.hpp>


int main ( int argc, char **argv ) {

    cv::Mat_<float> samples_xy;

    // fill the row of both the mats with 1 and 2 respectively.

    cv::Mat_<float> xsamples(1, 100, 1.f), ysamples(1, 100, 2.f);

    samples_xy.push_back(xsamples);
    samples_xy.push_back(ysamples);

    std::cout << samples_xy;
}

这是错误的解释。

除了cv :: Mat系列(Mat,Mat_,Matx)以外的任何其他类型的cv :: Mat系列都不可能push_back。在这个问题中,我试图推动一个浮动而不允许它。

另一个问题是列数必须与推送项目的矩阵相同。因此必须推送具有相同列数的任何其他Mat。在上述情况下,只能推送100列的矩阵。

所以,整个代码看起来像这样 -

{{1}}