Массив изображений OpenCV, матрица 4D - PullRequest
2 голосов
/ 05 декабря 2011

Я пытаюсь сохранить IPL_DEPTH_8U, трехканальное изображение в массиве, чтобы я мог сохранить 100 изображений в памяти.

Для инициализации моего 4D массива я использовал следующий код (строки, столбцы, канал, сохраненный):

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

Ответы [ 2 ]

1 голос
/ 05 декабря 2011

Вы пометили это как C и C ++.Если вы хотите работать в C ++, вы можете использовать (на мой взгляд) более простую структуру cv :: Mat для хранения каждого из изображений, а затем использовать их для заполнения вектора со всеми изображениями.

Например:

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 голосов
/ 05 декабря 2011

Я предполагаю что-то похожее на:

для ih matImage

memcpy((char*)cvImageBucket->data+i*size[0]*size[1]*size[2],(char*)matImage->data,size[0]*size[1]*size[2]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...