我正在尝试使用 OpenCV 的 SIFT 类 执行 SIFT 特征提取,我相信我正在正确使用这些函数:
std::string pathSIFT = "C:\\my\\image\\file\\directory";
cv::Ptr<cv::SiftFeatureDetector> detector =
cv::SiftFeatureDetector::create();
std::vector<cv::KeyPoint> keypoints;
cv::Mat output;
for (int j = 0; j < images2SIFT.size(); j++) {
detector->detect(images2SIFT.at(j), keypoints);
std::string s = std::to_string(j);
cv::drawKeypoints(images2SIFT.at(j), keypoints, output);
cv::imshow(window_name, output);
if (!std::filesystem::exists(pathSIFT + s + ".jpg")) {
cv::imwrite(pathSIFT + s + ".jpg", output);
}
waitKey(200);
}
但我看到像这样的图像
供参考,这是原始图像:
我查看了诸如 this 之类的资源,以发现我可能犯的一些错误,以及我发现的帮助人们使用
#include<opencv2\nonfree\nonfree.hpp>
library,是设置需要查找的关键点的数量 - 但当我尝试这个时,它似乎只是用随机点填充图像而不是使它更准确。
这是我图片的问题还是算法的问题?