繁体   English   中英

将std :: vector复制到相同大小的cv :: Mat_中的按行操作

[英]Rowwise operation of copying std::vector into cv::Mat_ of identical sizes

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);
   }
}

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

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

这是错误的解释。

除了cv :: Mat家族(Mat,Mat_和Matx)以外,其他任何类型的cv :: Mat家族都不可能推回。 在这个问题上,我试图推动一个浮动,并且不允许这样做。

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

因此,整个代码看起来像这样-

#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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM