[英]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.