2014-09-24 65 views
-1

我想在iOS上使用OpenCV進行對象檢測。我正在使用this code sample from the documentationOpenCV DescriptorExtractor返回空

這裏是我的代碼:

Mat src = imread("src.jpg"); 
Mat templ = imread("logo.jpg"); 

Mat src_gray; 
cvtColor(src, src_gray, CV_BGR2GRAY); 

Mat templ_gray; 
cvtColor(templ, templ_gray, CV_BGR2GRAY); 

int minHessian = 500; 

OrbFeatureDetector detector(minHessian); 

std::vector<KeyPoint> keypoints_1, keypoints_2; 

detector.detect(src_gray, keypoints_1); 
detector.detect(templ_gray, keypoints_2); 

OrbDescriptorExtractor extractor; 

Mat descriptors_1, descriptors_2; 

extractor.compute(src_gray, keypoints_1, descriptors_1); 
extractor.compute(templ_gray, keypoints_2, descriptors_2); 

的問題是在其離開descriptors_1總是空行extractor.compute(src_gray, keypoints_1, descriptors_1);

srctempl不爲空。

有什麼想法?

感謝

+0

是否keypoints_1爲空? – Dennis 2014-09-24 18:38:41

+0

是的,'keypoints_1'是空的。 – Eric 2014-09-26 17:53:04

+0

然後你不能計算描述符,因此描述符_1是空的。 – Dennis 2014-09-26 18:14:00

回答

0

首先我認爲,如果你想使用的特徵檢測器和描述符必須告知自己的,他們是如何工作的。 你可以看到這個話題,「佩內洛普」的答案說明了一切比我可以這樣做: https://dsp.stackexchange.com/questions/10423/why-do-we-use-keypoint-descriptors

的第一步,我認爲你應該知道如何更好的ORB檢測/描述作品(如果u真的想後當'

http://docs.opencv.org/modules/features2d/doc/feature_detection_and_description.html https://www.willowgarage.com/sites/default/files/orb_final.pdf

我這樣說是因爲你設置「minHessian」參數的ORB檢測:用它),什麼是它的參數,等等。在這個U可以檢查OpenCV的文檔和ORB紙minHessian'實際上是來自SURF探測器的參數。

無論如何,你的代碼的問題不是這樣。嘗試加載烏爾相似圖片的例子你是以下幾點:

Mat src = imread("src.jpg", CV_LOAD_IMAGE_GRAYSCALE); 
Mat templ = imread("logo.jpg", CV_LOAD_IMAGE_GRAYSCALE); 

然後檢測關鍵點:

detector.detect(src, keypoints_1); 
detector.detect(templ, keypoints_2); 

現在檢查keypoints_1和keypoints_2是不是空的。如果他們去描述符提取!它應該工作

希望這有助於