2014-04-08 34 views
0

我想在C++中使用OpenCV库实现BOW。我已提取的图像的关键点与SIFT方法是这样的(对于每个图像):OpenCV弓 - 太高的直方图值

featureDetector->detect(image, keypoints); 
descriptorExtractor->compute(image, keypoints, descriptors); 
bowTrainer.add(descriptors); 

然后词汇训练用bowTrainer.cluster()并存储到BOWImgDescriptorExtractor bowDE。在存储词汇后,我希望看到至少一张图像。这是实现这样

featureDetector->detect(image, keypoints); 
bowDE->compute(image, keypoints, histogram); 
for (int i = 0; i < histogram.cols; i++) 
    cout << histogram.at<unsigned>(0, i) << ","; 

而结果有1一行k列(k从k均值)值要么0或周围980000000 ......我不认为这是正确的,请告诉我,我是什么做错了。当我想要显示图时,这看起来非常糟糕。

回答

0

差点忘了......解决方案非常简单。行:

cout << histogram.at<unsigned>(0, i) << ","; 

了,因为产生的直方图是标准化直方图改为

cout << histogram.at<float>(0, i) << ","; 

。更详细的答案见OpenCV forum answer