2012-06-13 57 views
5

我在Mat所有相同尺寸 對象圖像夫婦我想創建一個BIX cv::Mat對象中保存所有串聯墊在OpenCV中

所以新矩陣的尺寸爲:widthNew = widthOld x矩陣的數量,高度保持不變。

我發現,這樣的副本可以用做:

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

但隨後,怎麼可能被屏蔽了三個矩陣定義的三個不同的時間?

問候, Moataz

+0

請注意,IplImage的最大尺寸約爲4000 * 4000。您可能還必須降低輸入圖像的分辨率 – jlengrand

+0

遮罩是可選的,您無需定義其中一個。 –

+0

好的。我會記住這一點,thnx –

回答

1

你可能想借此看看the source code of cvShowManyImages(),這是一個函數,需要幾個圖像作爲輸入,並將它們連接成一個單一的三通道圖像顯示:

使用的方法是設置單個大圖像的ROI,然後調整大小 並將輸入圖像複製到單個大圖像。

如果您創建的圖像足夠大以容納其他圖像,則不需要調整它們的大小。

如果您想知道如何在IplImage < - >cv::Mat之間轉換,請選擇this thread

+0

聽起來很有趣,thnx。我想我會複製這個想法來實現類似的使用純cv :: Mat而不是IpImage –

2

我認爲有一個簡單的方法來做到這一點。 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); 

我希望這可以幫助。

+0

目的地可以是相同的來源之一,所以'vconcat(out,out1,out); vconcat(out,out2,out);'在多線程上下文中適用於我(用於組合單個線程的輸出)。 – Izaan