opencv xfeature2d c++测试代码
时间: 2024-12-14 09:28:43 浏览: 11
OpenCV(开源计算机视觉库)中的`xfeatures2d`模块提供了一系列特征检测算法,如SIFT(尺度不变特征变换)、SURF(加速稳健特征)等。在C++中使用这些功能,你需要包含相关的头文件并实例化相应的特征提取类。
下面是一个简单的示例,展示如何使用SIFT算法从图像中检测关键点:
```cpp
#include <opencv2/xfeatures2d.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
int main(int argc, char** argv)
{
if (argc != 2) {
std::cout << "Usage: ./sift_example image_path" << std::endl;
return -1;
}
// 读取图片
cv::Mat img = cv::imread(argv[1], cv::IMREAD_GRAYSCALE);
if (!img.data) {
std::cout << "Error: Could not open or find the image." << std::endl;
return -1;
}
// 初始化SIFT对象
cv::Ptr<cv::FeatureDetector> sift = cv::xfeatures2d::SIFT::create();
// 找到关键点和描述符
std::vector<cv::KeyPoint> keypoints;
std::vector<float> descriptors;
sift->detectAndCompute(img, noArray(), keypoints, descriptors);
// 绘制关键点
cv::Mat output;
for (const auto& kp : keypoints) {
cv::circle(output, cv::Point(kp.pt.x, kp.pt.y), 2, cv:: Scalar(0, 0, 255), 2);
}
cv::imshow("Detected Keypoints", output);
cv::waitKey();
return 0;
}
```
阅读全文