我是opencv和c ++的新手。 iplimage和iplimage *有什么区别? 我在arg [1]中使用了需要iplimage *的cvHaarDetectObjects。我有一个Mat格式的框架。我怎么能把Mt转换成iplimage *? (我发现了一种将mat转换为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 );
答案 0 :(得分:1)
IplImage *是指向图像数据结构IplImage的指针。它用于opencv的C API。
在opencv 2.0之后,引入了C ++ API,并且“Mat”结构取代了IplImage。
C API函数接受IplImage *而不是IplImage,C ++ API函数接受Mat。
两种解决方案:
Mat frame;
// apply pre-processing functions
IplImage* frame2 = cvCloneImage(&(IplImage)frame);
objects = cvHaarDetectObjects(frame2, face_cascade, storage, scale_factor, 1 );
OR
使用C++ API function接受&框架,与haardetectobjects做同样的工作。
答案 1 :(得分:0)
如果你已经有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());
来自Canberk答案中的链接
或试试这个
IplImage iplframe = IplImage( frame );
objects = cvHaarDetectObjects( &iplframe, face_cascade, storage, scale_factor, 1 );