2012-11-08 56 views
2

OpenCV的垫格式

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

时我做im show,图像在那里,因为它应该是。

+1

为cvHaarDetectObjects文档说图像是“含有其中检测对象的图像的类型CV_8U的矩阵”。我认为这个错误告诉你你的'img'不是CV_8U。 – SSteve

+0

确保调用img-> convertTo(temp,CV_8U,1。/ 255,0);在功能之前,没有它仍然不工作... – L7ColWinters

+0

它实际上是你的两个解决方案,显然你必须转换为8U然后创建IplImage并将其传递给HDO – L7ColWinters

回答

2

不,安德烈(@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); 

也就是说哈尔探测器是如何用C++使用自从2011年8月以来的Opencv 2.3.1。Also let me attach a documentation.

下面是一个证明,下面。 :)我做了一个Haar_detector包装这个cv :: CascadeClassifier - 这真的Adaboost级联分类器与Haar-like功能,因此名称。

The proof

+0

级联分类器代码没有移植到2.x C++库,您必须使用cv ... – L7ColWinters

+0

好吧,我在我的OpenCV 2.4.2 C++程序中正好使用了这个代码。我也使用过OpenCV 2.3.1。让我把这些必要的东西放在那里,你会看到的。 –

+0

当您再次尝试我的代码时,请让我知道吗? –

3

cvHaarDetectObjects预计IplImageCvMat但您通过cv::Mat对象。

所以,你需要这样的转换:

IplImage img1 = img; 
faces = cvHaarDetectObjects(&img1, cascade, storage, 1.2, 2, CV_HAAR_DO_CANNY_PRUNING, Size(0, 0)); 
+0

如果我这样做,我得到:OpenCV错误:错误的参数(未知数组类型)在cvarrToMat – L7ColWinters

+0

如果用'CvMat'替换'IplImage'会怎么样? –

+0

同样的结果,是否还必须将数据复制到新的IplImage对象? – L7ColWinters