[英]OpenCV image matrix to vector to matrix
我想做以下事情:
可以說我有100張圖片。 我想將每個圖像的矩陣轉換為一個向量並構建一個新的矩陣(100行),其中每一行是我們從圖像中得到的向量。 最好的方法是什么?
假設您的所有圖像大小相同,
然后使用Mat :: push_back(),您可以逐行將每個圖像存儲到新的Mat,但是您需要使用Mat :: reshape()將源圖像重塑為單個行。 稍后您可以使用Mat :: row訪問每一行(將是您的源圖像),但您需要再次重塑您的源大小。
見下面的例子。
加載相同大小和通道的源圖像。
Mat src1=imread("a.jpg",1);
Mat src2=imread("b.jpg",1);
Mat src3=imread("c.jpg",1);
將每個源Mat逐行推回到新的Mat,這里需要將源重新整形為單行Mat,因為結果Mat中的每一行應代表每個源圖像。
Mat A;
A.push_back(src1.reshape(0,1)); //0 makes channel unchanged and 1 makes single row
A.push_back(src2.reshape(0,1));
A.push_back(src3.reshape(0,1));
稍后使用A.row(index).clone()
訪問A中的每一行並重新A.row(index).clone()
為原始大小,
Mat B;
B = A.row(0).clone();
imshow("src1",B.reshape(0,src1.rows));
B = A.row(1).clone();
imshow("src2",B.reshape(0,src1.rows));
B = A.row(2).clone();
imshow("src3",B.reshape(0,src1.rows));
vector<Mat> images;
// fill it with data
Mat matVec(images.size(), images[0].cols*images[0].rows, images[0].type());
for(unsigned int i=0; i<images.size(); i++)
(images[i].reshape(0,1)).copyTo(matVec.row(i));
該解決方案基於Haris提出的解決方案,但耗時較少。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.