OpenCV BOW - 直方图值太高

时间:2014-04-08 18:12:57

标签: c++ opencv

我正在尝试用C ++中的OpenCV库实现BOW。我用这样的SIFT方法(对于每个图像)提取了图像的关键点:

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) << ",";

结果有1k列(k-means k)值0980000000左右我不知道认为这是正确的,请告诉我我做错了什么。当我想要显示图表时,这看起来非常糟糕。

1 个答案:

答案 0 :(得分:0)

几乎忘了......解决方案非常简单。行:

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

必须改为

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

因为生成的直方图是标准化的直方图。有关更详细的答案,请参阅OpenCV forum answer