我有几张尺寸相同的图像,它们都在Mat
对象中。我想创建一个cv::Mat
对象来存储它们。
因此新矩阵的维度为:widthNew = widthOld x matrices数量,高度保持不变。
我发现可以使用以下代码进行此类复制:
void cvCopy(const CvArr* src, CvArr* dst, const CvArr* mask=NULL)
但是,那么面具如何在三个矩阵中被定义三次呢?
问候, Moataz
我有几张尺寸相同的图像,它们都在Mat
对象中。我想创建一个cv::Mat
对象来存储它们。
因此新矩阵的维度为:widthNew = widthOld x matrices数量,高度保持不变。
我发现可以使用以下代码进行此类复制:
void cvCopy(const CvArr* src, CvArr* dst, const CvArr* mask=NULL)
我认为有一个简单的方法可以做到这一点。OpenCV有一些未记录的方法,称为hconcat()
和vconcat()
。第一个是用于水平串联,第二个是用于垂直串联。
你可以这样使用它们:
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);
我希望这可以帮到你。
您可能想要查看cvShowManyImages()
的源代码, 它是一个函数,它将几个图像作为输入,并将它们连接到单个3通道图像中以进行显示:
所使用的方法是设置单个大图像的ROI,然后调整大小并将输入图像复制到单个大图像上。
如果创建一个足够大以容纳其他图像的目标图像,则不需要调整其大小。
如果您想知道如何在IplImage
和cv :: Mat
之间转换,请参阅此主题。