Конвертирование 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 );