Конвертирование Mat в iplimage* в opencv

Я новичок в opencv и C++. В чем разница между iplimage и iplimage*? Я использовал cvHaarDetectObjects, которые нуждаются в iplimage * в arg[1]. У меня есть рамка в формате Mat. как я могу конвертировать Mt в iplimage*? (Я нашел способ конвертировать мат в iplimage, но не в iplimage*).

Истинный это:

iplimage* frame=cvLoadImage("1.jpg");
objects = cvHaarDetectObjects( frame, face_cascade, storage, scale_factor, 1 );

но я хочу использовать:

Mat frame;
//some functions are performed on frame
objects = cvHaarDetectObjects( frame, face_cascade, storage, scale_factor, 1 );

2 ответа

IplImage* - указатель на структуру данных изображения IplImage. Используется в C API opencv.

После opencv 2.0 появился API C++, а структура "Mat" заменила IplImage.

Функции API C принимают IplImage* вместо IplImage, а функции API C++ принимают Mat.

Два решения:

Mat frame;
// apply pre-processing functions
IplImage* frame2 = cvCloneImage(&(IplImage)frame);
objects = cvHaarDetectObjects(frame2, face_cascade, storage, scale_factor, 1 );

ИЛИ ЖЕ

использовать функцию C++ API, принимающую &frame, делая ту же работу с haardetectobjects

Если у вас уже есть изображение в формате Mat, попробуйте этот вызов функции

void CascadeClassifier::detectMultiScale(const Mat& image, vector<Rect>& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size());

по ссылке в ответе Канберка

или попробуйте это

IplImage iplframe = IplImage( frame );
objects = cvHaarDetectObjects( &iplframe, face_cascade, storage, scale_factor, 1 );
Другие вопросы по тегам