关于串联:OpenCV 中的 Concatenate Mat

Concatenate Mat in OpenCV

我在 Mat 对象中有几张图像,它们都具有相同的尺寸
我想创建一个 bix cv::Mat 对象来保存它们所有

所以新矩阵的维数为:widthNew = widthOld x 矩阵个数,高度不变。

我发现这样的副本可以使用:

1
void cvCopy(const CvArr* src, CvArr* dst, const CvArr* mask=NULL)

但是,如何为三个矩阵定义三个不同时间的掩码?.

问候,
莫阿塔兹


我认为有一个简单的方法可以做到这一点。 OpenCV 有一个未记录的方法,称为 hconcat()vconcat()。第一个用于水平连接,第二个用于垂直连接。

你可以这样使用它们:

1
2
3
4
5
6
Mat A, B;
... //In this part you initialize the Mat A and Mat B.

Mat H, V; //These are the destination matrices
hconcat(A, B, H);
vconcat(A, B, V);

我希望这会有所帮助。


您使用 roi 来定义实际上是目标图像区域的图像,然后复制到该区域。请参阅在另一个的 ROI 内复制 cv::Mat


你可能想看看 cvShowManyImages() 的源代码,它是一个函数,它将多张图像作为输入并将它们连接成一个要显示的 3 通道图像:

The method used is to set the ROIs of a Single Big image and then resizing
and copying the input images on to the Single Big Image.

如果您创建的目标图像足够大以容纳其他图像,则无需调整它们的大小。

如果您想知道如何在 IplImage <-> cv::Mat 之间进行转换,请查看此线程。