OpenCV Mat в IplImage * преобразование - PullRequest
6 голосов
/ 24 мая 2011

У меня есть указатель на изображение:

IplImage *img;

, которое было преобразовано в Mat

Mat mt(img);

Затем Mat отправляется функции, которая получаетссылка на Mat в качестве ввода void f(Mat &m);

f(mt);

Теперь я хочу скопировать обратно данные Mat в исходное изображение.

Есть ли у вас какие-либо предложения?

Бест Али

Ответы [ 3 ]

2 голосов
/ 25 мая 2011

Ваш ответ можно найти в документации здесь: http://opencv.willowgarage.com/documentation/cpp/c++_cheatsheet.html

Редактировать:

Первая половина первой области кода действительно говорит о конструкторе копирования, который у вас уже есть.

Вторая половина первой области кода отвечает на ваш вопрос. Воспроизведено ниже для ясности.

//Convert to IplImage or CvMat, no data copying
IplImage ipl_img = img;
CvMat cvmat = img; // convert cv::Mat -> CvMat
1 голос
/ 11 июля 2012

Для следующего случая:

double algorithm(IplImage* imgin)
{
    //blabla
    return erg;
}

Я использую следующий способ вызова функции:

cv::Mat image = cv::imread("image.bmp");
double erg = algorithm(&image.operator IplImage());

Я провел несколько тестов и как будет выглядеть объект изображения.память.Оператор IplImage() построит заголовок только для IplImage.Может быть, это может быть полезно?

0 голосов
/ 15 мая 2013

Вы можете использовать эту форму:

Ваш код:

plImage * img;

Mat mt (img);

F (т);

Теперь скопируйте данные Mat обратно в исходное изображение.

img-> imageData = (char *) mt.data;

Вы также можете скопировать данные вместо указателя:

memcpy (mt.data, img-> imageData, (mt.rows * mt.cols));

(mt.rows * mt.cols) - это размер, который вы должны использовать для копирования всех данных из mt в img.

Надеюсь, я помог

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...