2013-07-02 6 views
1

Я хотел бы знать, знает ли кто, как назначить данные изображения в файл cv::Mat, который уже был создан. Похоже, что конструктор cv::Mat имеет перегруженный метод, который поддерживает передачу данных void* данных, но я не уверен, что делать, если объект уже сконструирован (без вызова конструктора и замены cv::Mat).Назначение данных cv :: Mat

В настоящее время я вручную указываю cv::Mat.data на данные, которые я хочу. Я не уверен, что я должен сделать то же самое для cv::Mat.datastart. Я бы подумал, что будет какая-то вспомогательная функция, позволяющая переназначить данные cv::Mat.

Спасибо.

+0

Имеются ли новые данные того же типа и размера, что и построенный заголовок Mat? – William

+0

Да, меняются только данные. –

+0

Ручное указание указателя 'data' на новые данные изображения * не * хорошая идея. Это может выглядеть так, как будто это работает, но могут быть тонкие проблемы с созданием подматриц или даже подсчетом ссылок Mat. Можете ли вы подробнее рассказать о своей проблеме? Как хранятся данные изображения? Является ли копирование этих данных приемлемым? – Aurelius

ответ

1

Вы можете просто переназначить предварительно инициализированный cv::Mat новым данным изображения. Вот несколько юридических способов присвоения новых данных изображения уже созданному cv::Mat.

cv::Mat my_mat = cv::imread("some_image.jpg"); 
my_mat = cv::imread("another_image.jpg"); 

cv::Mat second_mat = cv::imread("one_more.jpg"); 
second_mat = my_mat.clone(); 
1

Документация:

// constructor for matrix headers pointing to user-allocated data 
Mat(int _rows, int _cols, int _type, void* _data, size_t _step=AUTO_STEP); 
Mat(Size _size, int _type, void* _data, size_t _step=AUTO_STEP); 

Указатель данных можно указать в любом месте с действительным _size и _Type. Если новые данные имеют другой размер или тип, то ваш заголовок недействителен.

Смежные вопросы