2011-06-23 21 views
3

我想從堆疊的2D墊子中製作3D墊子,然後沿着3D墊子的不同軸線拉出2D墊子。我知道我可以通過手動訪問每一個圖像的每一行或每列來建立它,但有沒有更好的做到這一點?如何將2D圖像分配給3D OpenCV Mat的平面,然後沿不同的軸提取2D MAT?

vector<cv::Mat> images; 

...填充圖像

int sz[] = {images[0].rows, images[0].cols, images.size()} 
cv::Mat cube(3, sz, images[0].type()); 
cube = Scalar(0); 

for (int i = 0; i < images.size(); i++) { 

...去處圖像載體導入三維墊子

} 

vector<cv::Mat> image_rows; 

for (int i = 0; i < images[0].rows(); i++) { 

...推圖像平面成沿寬度和3D的深度image_rows立方體矩陣

} 
+0

你見過'cv :: reshape'嗎? http://opencv.willowgarage.com/documentation/cpp/basic_structures.html#cv-reshape – karlphillip

+0

似乎重塑的操作在給定參數的3D墊上不明確 - 或者我製作一個n通道每個頻道的圖像是源2D地墊之一?我注意到2.2.0文檔僅說明了二維地墊,但是它已從您擁有的鏈接中刪除(可能是2.3.0)。 –

回答

1

我hav e在opencv方面做了很多工作,據我所知,這是最好的方法。你可以製作更高維矢量的Mat,但你的訪問會更不乾淨。堅持矢量它是你最好的選擇。