我正在尝试用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) << ",";
结果有1
行k
列(k-means k
)值0
或980000000
左右我不知道认为这是正确的,请告诉我我做错了什么。当我想要显示图表时,这看起来非常糟糕。
答案 0 :(得分:0)
几乎忘了......解决方案非常简单。行:
cout << histogram.at<unsigned>(0, i) << ",";
必须改为
cout << histogram.at<float>(0, i) << ",";
因为生成的直方图是标准化的直方图。有关更详细的答案,请参阅OpenCV forum answer