2011-07-01 101 views
2

我按照安裝指南使用VS 2008與OpenCV 2.1安裝。 FeatureDetector/SurfFeatureDetector被列爲文檔類,但他們被認爲是「語法錯誤:標識符「SurfFeatureDetector」如何在OpenCV C++中使用FeatureDetector?

這幾乎是我的代碼的全部。

#include "cv.h" 
#include "highgui.h" 

Ptr<FeatureDetector> *detect = new SurfFeatureDetector(); 

我已經嘗試了一堆隨意組合來得到這個工作。我如何初始化一個featuredetector?

+0

什麼樣的指針是什麼? – karlphillip

+0

ack,編輯。應該是類型FeatureDetector – Andrw

+1

Ptr是opencv自動指針,在使用結束時自行刪除 – DanielHsH

回答

1

我覺得你有安裝問題,請嘗試從這裏resinstalling:sourceforge.net/projects/opencvlibrary/files/opencv-win/2.2

花葯另一種選擇是,你的預編譯器已定義__OPENCV_OLD_CV_H__。 嘗試之前#include "cv.h"

取消定義它,當你鍵入#include "cv.h" 它會自動應包括featurs2d。其實cv.h包括以下內容:

#include "opencv2/core/core_c.h" 
#include "opencv2/core/core.hpp" 
#include "opencv2/imgproc/imgproc_c.h" 
#include "opencv2/imgproc/imgproc.hpp" 
#include "opencv2/video/tracking.hpp" 
#include "opencv2/features2d/features2d.hpp" 
#include "opencv2/flann/flann.hpp" 
#include "opencv2/calib3d/calib3d.hpp" 
#include "opencv2/objdetect/objdetect.hpp" 
#include "opencv2/legacy/compat.hpp" 
3

你正在聲明一個指向cv :: Ptr的指針 - 你真的應該只有cv :: Ptr。更改您的代碼到

#include "cv.h" 
#include "highgui.h" 

using namespace cv; 
Ptr<FeatureDetector> detect = new SurfFeatureDetector(); 

它應該工作。

+0

+1它的確如此。你擊敗了我。 – karlphillip

+0

它仍然無法編譯,它似乎仍然不能找到FeatureDetector。有人說在我的OpenCV2.1安裝中找不到feature2d.hpp,這可能是問題的原因嗎? – Andrw

+0

你有在代碼中的某處使用'namespace cv'嗎?你必須包含它或者手動聲明'cv'命名空間。我之前使用過這些類,從來不必包含「features2d.hpp」,但是查看一些我的舊代碼,也可能需要'#include '。 – Sean

0

您需要OpenCV 2.x風格的C++包含。見下面

#include "opencv2/features2d/features2d.hpp" 
#include "cv.h" 
#include "highgui.h" 

using namespace cv; 
Ptr<FeatureDetector> detect = new SurfFeatureDetector(); 
相關問題