Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 如何使用浮点向量初始化cv::Mat?_Opencv_Vector_Mat - Fatal编程技术网

Opencv 如何使用浮点向量初始化cv::Mat?

Opencv 如何使用浮点向量初始化cv::Mat?,opencv,vector,mat,Opencv,Vector,Mat,有没有一种方法可以使用向量对象初始化opencvcv::Mat? 或者我需要循环遍历向量的每个条目并将其写入cv::Mat对象中吗?为了详细理解,我编写了以下测试代码(包括@Miki的注释) 当你测试它时,你会很好地理解它 #include <opencv2/highgui.hpp> #include <iostream> using namespace cv; using namespace std; int main(int argc, char* argv[])

有没有一种方法可以使用
向量
对象初始化opencv
cv::Mat

或者我需要循环遍历向量的每个条目并将其写入
cv::Mat
对象中吗?

为了详细理解,我编写了以下测试代码(包括@Miki的注释)

当你测试它时,你会很好地理解它

#include <opencv2/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char* argv[])
{
vector<float> vec{0.1,0.9,0.2,0.8,0.3,0.7,0.4,0.6,0.5,1};

Mat m1( vec ); 
imshow("m1",m1);
waitKey();

Mat m2( 1,vec.size(), CV_32FC1,vec.data());
imshow("m2",m2);
waitKey();

Mat1f m3( vec.size(), 1, vec.data());
imshow("m3",m3);
waitKey();

Mat1f m4( 1, vec.size(), vec.data());
imshow("m4",m4);
waitKey();

cout << "as seen below all Mat and vector use same data" << endl;
cout << vec[0] << endl;
m1 *= 2;
cout << vec[0] << endl;
m2 *= 2;
cout << vec[0] << endl;
m3 *= 2;
cout << vec[0] << endl;
m4 *= 2;
cout << vec[0] << endl;

return 0;
}
#包括
#包括
使用名称空间cv;
使用名称空间std;
int main(int argc,char*argv[])
{
向量向量{0.1,0.9,0.2,0.8,0.3,0.7,0.4,0.6,0.5,1};
matm1(vec);
imshow(“m1”,m1);
waitKey();
材料m2(1,向量大小(),CV_32FC1,向量数据());
imshow(“m2”,m2);
waitKey();
Mat1f m3(向量大小(),1,向量数据());
imshow(“m3”,m3);
waitKey();
Mat1f m4(1,向量大小(),向量数据());
imshow(“m4”,m4);
waitKey();

你的浮点向量能容纳什么?每个像素的颜色或所需矩阵的比例?
Mat1f Mat(1,vec.size(),vec.data()
cv::Mat Mat(vec)^^也这样做。@sturkmen:它是有效的。如果你把你的建议作为答案写下来,我会接受它。向量也会被表示为一列。还有没有办法用它来初始化一行?(如果没有,我可以简单地转置Mat)用你的方法直接深度复制数据(构造函数中为true)毫无价值使用我的方法时,您需要克隆矩阵以进行深度复制。此外,要获得具有给定行和列的矩阵,您需要使用您的方法进行重塑,而使用我的方法时,您可以在构造函数中指定行和列。因此,这两种方法都有优缺点,具体取决于您的任务。