根据this等来源,人们使用SIFT的唯一方式似乎是使用库
#include <opencv2/nonfree/features2d.hpp>
我没有找到任何来源说在c++ opencv中有其他选项
有没有人知道一种方法来做SIFT提取没有这个库?
我试过使用opencv附带的这个库
include〈opencv2/features2d.hpp〉
根据https://docs.opencv.org/4.x/d7/d60/classcv_1_1SIFT.html,它应该包含所需的SIFT函数
const cv::Mat input = cv::imread("my/file/path", 0); //Load as grayscale
cv::SiftFeatureDetector detector;
std::vector<cv::KeyPoint> keypoints;
detector.detect(input, keypoints);
// Add results to image and save.
cv::Mat output;
cv::drawKeypoints(input, keypoints, output);
for (int i = 0; i < 100; i++) {
imshow(window_name, output);
waitKey(50);
}
但是当我运行这个函数时,我得到一个异常,这可能意味着没有任何东西被存储在输出矩阵中
Unhandled exception at 0x00007FFFF808FE7C in CS4391_Project1.exe: Microsoft C++ exception: cv::Exception at memory location 0x00000008C15CF5C0.
1条答案
按热度按时间avwztpqn1#
据我所知,OpenCV希望你动态地创建特征检测器。例如,你可以这样做:
[在Ubuntu上测试,使用OpenCV 4.5.4]
请注意,尽管它检测到的特征将在灰度图像上以彩色轮廓显示,但它们有时非常小,因此您需要仔细查看才能找到它们。