2012-11-08 58 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