2011-12-05 269 views
1

我試圖將IPL_DEPTH_8U,3通道圖像存儲到一個數組中,以便我可以將100個圖像存儲在內存中。OpenCV圖像陣列,4D矩陣

初始化我的四維陣列我用下面的代碼(行,COLS,信道,存儲的):

int size[] = { 324, 576, 3, 100 }; 
CvMatND* cvImageBucket; = cvCreateMatND(3, size, CV_8U); 

我然後創建的矩陣和變換後的圖像分割成矩陣

CvMat *matImage = cvCreateMat(Image->height,Image->width,CV_8UC3); 
cvConvert(Image, matImage); 

我將如何/訪問CvMatND將CvMat複製到存儲位置?

例如cvImageBucket(:,:,:,0) = matImage; // copied first image into array

+0

檢查了這一點http://stackoverflow.com/questions/6493687/accessing-elements-of-cvcreatematnd/6525748#6525748 – Boaz

回答

1

您已經標記了這個既是C和C++。如果你想用C++工作,你可以使用(在我看來)更簡單cv::Mat structure來存儲每個圖像,然後使用它們來填充所有圖像的vector

例如:

std::vector<cv::Mat> imageVector; 
cv::Mat newImage; 

newImage = getImage();  // where getImage() returns the next image, 
          // or an empty cv::Mat() if there are no more images 
while (!newImage.empty()) 
{ 
    // Add image to vector 
    imageVector.push_back(image); 

    // get next image 
    newImage = getImage(); 
} 
0

我猜類似於:

爲第i個matImage

memcpy((char*)cvImageBucket->data+i*size[0]*size[1]*size[2],(char*)matImage->data,size[0]*size[1]*size[2]);