2

读入图片

Mat img=imread("i000qa-fn.jpg",CV_LOAD_IMAGE_COLOR);

尝试寻找对象...

faces = cvHaarDetectObjects(img,cascade, storage, 1.2, 2, CV_HAAR_DO_CANNY_PRUNING, Size(0, 0));

和瓦拉...

OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat, file /media/Data/sdks/OpenCV-2.4.2/modules/core/src/array.cpp, line 2482

当我做 imshow 时,图像就在那里。

4

2 回答 2

3

cvHaarDetectObjects期望IplImageCvMat但您正在传递cv::Mat对象。

所以你需要这样的转换:

IplImage img1 = img;
faces = cvHaarDetectObjects(&img1, cascade, storage, 1.2, 2, CV_HAAR_DO_CANNY_PRUNING, Size(0, 0));
于 2012-11-08T20:50:08.603 回答
2

不,Andrey (@AndreyKamaev),你需要一个不同的函数:

#include <opencv2/core/core.hpp>
#include <opencv2/objdetect/objdetect.hpp>
using namespace cv;

Mat img = imread(img_path);
CascadeClassifier haar_cascade.load(path);

vector<Rect> detection_rois;
haar_cascade.detectMultiScale(img, detection_rois, 1.2, 2, 
                                  0|CV_HAAR_DO_CANNY_PRUNING);

这就是自 2011 年 8 月以来的 Opencv 2.3.1 以来在 C++ 中使用 Haar 检测器的方式。另外让我附上一份文档。

下面是一个证明。:) 我围绕这个 cv::CascadeClassifier 做了一个 Haar_detector 包装器——它实际上是一个具有类似 Haar 功能的 Adaboost 级联分类器,因此得名。

证据

于 2012-11-23T13:50:03.477 回答