0

我是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 );
4

2 回答 2

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

或者

使用接受 &frame 的C++ API 函数,与 haardetectobjects 做同样的工作。

于 2013-06-29T13:08:04.220 回答
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());

来自坎伯克答案中的链接

或试试这个

IplImage iplframe = IplImage( frame );
objects = cvHaarDetectObjects( &iplframe, face_cascade, storage, scale_factor, 1 );
于 2014-02-14T16:49:32.190 回答