opencv关于特征点检测的版本问题

一、在2.X.X版本featuredetector可以使用如下格式定义特征点检测的方法(用2.4.10版本实验):
Ptr detector = FeatureDetector::create(“SIFT”);
detector->detect(image, keypoint);

Ptr desc_detector = DescriptorExtractor::create(“SIFT”);
desc_detector->compute(image, keypoint, descriptor);
但是在使用SIFT SURF检测格式时,需要进行初始化initModule_nonfree();
需要特别说明的一点:训练词典时,BOWtrainer.cluster();// 这里要求是必须的 CV_32F 类型的描述符数据,因此不能使用ORB特征。
完整程序如下:

#include "opencv.hpp"
#include "nonfree/nonfree.hpp"
using namespace cv;
using namespace std;

int main()
{
	Mat image = imread("1.jpg");
	imshow("image", image);

	waitKey(1000);
	initModule_nonfree();
	Ptr detector = FeatureDetector::create("SIFT"); // 不能变成sift detect 报错

	vectorkeypoint;
	detector->detect(image, keypoint);
	cout << "keypoint : " << keypoint.size() << endl;

	Ptr desc_detector = DescriptorExtractor::create("SIFT");// 不能变成sift  compute报错
	Mat descriptor;
	desc_detector->compute(image, keypoint, descriptor); 

	BOWKMeansTrainer BOWtrainer(100);
	BOWtrainer.add(descriptor);
	Mat vocab;
	vocab = BOWtrainer.cluster();// 这里要求是必须的 CV_32F 类型的描述符数据
	cout << "聚类完成" << endl;

	waitKey(0);


	//Ptr orb = ORB::create();
	ORB orb;
}

二、3.X以上版本
将SIFT SURF 的特征点检测放到了contrib库里,但是ORB还是可以单独使用的,并没有移除出去。如果想要使用BOW词典,就必须安装contrib库。

之后,可以在2.4.10的版本上完成BOW词典+3.0配置contrib库完成BOW词典
需要注意的一点是:matcher时,选用的方式 ORB 与 SIFT SURF 不同,暴力匹配,汉明距离等。参考这里
一般的,仅仅ORB可以使用汉明距离,对应了BFMatcher 类

Opencv可以在VS下配置多个版本,随意切换。

你可能感兴趣的:(词袋模型)