假设您的所有图像大小相同,
然后使用 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);
Run Code Online (Sandbox Code Playgroud)
将每个源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));
Run Code Online (Sandbox Code Playgroud)
稍后从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));
Run Code Online (Sandbox Code Playgroud)
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));
Run Code Online (Sandbox Code Playgroud)
该解决方案基于Haris提出的解决方案,但耗时较少.
| 归档时间: |
|
| 查看次数: |
5692 次 |
| 最近记录: |