2012-11-08 9 views
2

OpenCV의 매트 형식

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

...

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

객체를 찾기 위해 시도에서 이미지를 읽어 나는 imshow, the 이미지가 있어야합니다.

+1

cvHaarDetectObjects 대한 문서 이미지는 "개체가 탐지 화상을 포함하는 유형의 매트릭스 CV_8U"말한다. 나는이 오류가 당신의'img'가 CV_8U가 아니라고 말하고 있다고 생각한다. – SSteve

+0

은 img-> convertTo (temp, CV_8U, 1./255,0)를 호출해야합니다. 바로 직전에 기능이 작동하지 않고 여전히 작동하지 않습니다. – L7ColWinters

+0

infact은 모두 솔루션입니다. apparantly하면 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에서 사용되는 방법입니다 ++ Opencv 2.3.1부터 2011 년 8 월까지입니다. Also let me attach a documentation.

아래의 증거가 있습니다. :)이 Cv :: CascadeClassifier 주위에 Haar_detector 래퍼를 만들었습니다. 어느 이 실제로는 Haar와 유사한 기능을 가진 Adaboost 캐스케이드 분류자인입니다. 따라서 이름입니다.

The proof

+0

계단식 분류 코드가 2.x C++ 라이브러리로 이식되지 않았 으면 cv ... – L7ColWinters

+0

을 사용해야합니다.이 코드를 OpenCV 2.4.2 C++ 프로그램에서 정확하게 사용하고 있습니다. 또한 OpenCV 2.3.1을 사용했습니다. 거기에 필요한 포함도 넣으십시오. 그러면 알게 될 것입니다. –

+0

내 코드를 다시 한번 시험해 보았을 때 알려주시겠습니까? –

3

cvHaarDetectObjectsIplImage 또는 CvMat이지만, 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

'CplMm''로'CvMat'을 대체하면 어떻게 될까요? –

+0

동일한 결과, 새 IplImage 개체에 데이터를 복사해야합니까? – L7ColWinters