2011-12-05 225 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]);