在opencv中将Mat转换为iplimage*



我是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 );
IplImage*是指向图像数据结构IplImage的指针。它用于opencv的C API。

在opencv2.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 );

使用C++API函数接受&框架,对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());

来自Canberk答案中的链接

或者试试这个

IplImage iplframe = IplImage( frame );
objects = cvHaarDetectObjects( &iplframe, face_cascade, storage, scale_factor, 1 );

相关内容

  • 没有找到相关文章