2012-08-30 57 views
1

我最近在opencv的ORB描述符中發現了一些非常奇怪的行爲。cv :: Orb中的錯誤?

cv::Mat grey; //greyscale image 
std::vector<cv::KeyPoint> keypoints; 
cv::Mat descriptors; 
cv::ORB detector; 
detector(grey,cv::Mat(),keypoints,descriptors); 

上面的代碼一致崩潰如果給予不含有潛在的關鍵點(例如黑色圖像)與誤差

OpenCV Error: Assertion failed (m.dims >= 2) in Mat, file /Users/user/slave/ios_framework/src/opencv/modules/core/src/matrix.cpp, line 268 

圖像我發現,解決我可以做的問題以下

cv::Mat grey; 
std::vector<cv::KeyPoint> keypoints; 
cv::Mat descriptors; 
cv::ORB detector; 
detector(grey,cv::Mat(),keypoints); 
if(keypoints.size() > 0) 
{ 
    detector(grey,cv::Mat(),keypoints,descriptors,true); 
} 

它首先檢測關鍵點,然後在檢測到任何關鍵點時生成它們的描述符。我在iOS上使用opencv2作爲框架。

這是OpenCV中的錯誤嗎?如果不是,我做錯了什麼?如果是這樣,是否有任何版本修復?

回答

3

我只是跑這個代碼

cv::Mat grey = cv::Mat::zeros(100, 100, CV_8UC1); 
std::vector<cv::KeyPoint> keypoints; 
cv::Mat descriptors; 
cv::ORB detector; 
detector(grey,cv::Mat(),keypoints,descriptors); 

與OpenCV的2.4.1沒有問題。

你調試到你的代碼,看看到底哪裏斷言失敗?

+0

是的,它在行檢測器(灰色,cv :: Mat(),關鍵點,描述符)上失敗;你確定你提供了一個沒有關鍵點的圖片嗎? (純白色或純黑色) – Hammer

+0

是的,我運行了上面的代碼,'cv :: Mat :: zeros(100,100,CV_8UC1)'返回一個100 x 100像素的8位圖像,全黑色像素。你也可以嘗試設置你的輸入圖像,如果它的工作,那麼我假設你的輸入圖像沒有正確加載。這也符合斷言,它聲明輸入矩陣只有一個維度。 – flix

+0

對不起,我甚至沒有讀到第一次初始化灰色的行。那確切的代碼爲我崩潰。我想我的OpenCV版本中存在一個錯誤,或者構建設置有問題。感謝您爲我檢查出來。我會去尋找更好的/更新的版本 – Hammer