2013-06-29 42 views
0

我是opencv和C++中的新成员。 iplimage和iplimage *有什么区别? 我在arg [1]中使用了需要iplimage *的cvHaarDetectObjects。我有一个格式为Mat的框架。我怎么能把Mt转换成iplimage *? (我发现了一种将mat转换成iplimage的方式,但不能转换成iplimage *)。将mat转换为iplimage *在opencv中

真个是:

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); 

回答

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做同样的工作。

0

如果你已经在垫格式的图像,你应该试试这个函数调用

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);