我对OpenCV很陌生。我按照本教程在图片中搜索对象,并成功地运行了代码。
在搜索时,我看到了用于特性匹配的更多选择 (例如Fast、ORB或BRISK)。因此,我决定尝试一个不同于SURF的描述符。
但我有麻烦了。我要做什么才能创建一个不同的描述符?有人能帮我吗,也许可以用一个OpenCV3.2代码示例来帮助我?:)
这是我在搜索时发现的一个链接,但遗憾的是,它不是针对OpenCV 3.2的。
发布于 2017-03-24 22:50:13
在OpenCV 3中引入了一个一致的特征检测API。
也就是说,每个特征检测器都实现了一个静态create()方法,该方法将cv::Ptr返回给相应的检测器。
下面是一个简单的例子,它显示了所描述的行为:
#include <iostream>
#include <vector>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/features2d.hpp>
#include <opencv2/xfeatures2d.hpp>
int main(int argc, char *argv[])
{
if(argc > 1) {
cv::Mat img = cv::imread(argv[1], cv::ImreadModes::IMREAD_GRAYSCALE);
if(!img.empty()) {
cv::Ptr<cv::xfeatures2d::SiftFeatureDetector> siftDetector = cv::xfeatures2d::SiftFeatureDetector::create();
cv::Ptr<cv::BRISK> briskDetector = cv::BRISK::create();
std::vector<cv::KeyPoint> siftKeypoints;
std::vector<cv::KeyPoint> briskKeypoints;
siftDetector->detect(img, siftKeypoints);
briskDetector->detect(img, briskKeypoints);
std::cout << "Detected " << siftKeypoints.size() << " SIFT keypoints." << std::endl;
std::cout << "Detected " << briskKeypoints.size() << " BRISK keypoints." << std::endl;
return 0;
} else {
std::cout << "Unable to load image, aborting." << std::endl;
return -1;
}
}
std::cout << "A path to an (image) file is missing." << std::endl;
return -1;
}在下面的示例中,您可以使用OpenCV的每一个检测器,这些检测器位于最新的文档中:
默认描述符
非自由描述符
实验描述符
https://stackoverflow.com/questions/42998863
复制相似问题