Opencv3バージョン、モジュールヘッダの変化に加えてSURF上の特徴点検出、およびプログラムの使用量を変更した後。(あなたがこのプログラムを実行すると、私はVS2019 + Opencv4.1.1を使用します)
差:
① 位置モジュールヘッダファイルが変更された
② xfeatures2dネームスペースを増やすには(そうでなければ、未定義の識別子が表示されているSURF)
変更③SurfFeatureDetector検出器(minHessian):
のPtr = SURF ::作成検出器(minHessian);
④detector.detect (srcImage1、keypoints_1);
detector.detect(srcImage2、keypoints_2);変化:
detector->検出(srcImage1、keypoints_1);
detector->(srcImage2、keypoints_2)を検出します。
A .SURFアルゴリズム
特徴検出
スケール空間
選択不変照明不変性、回転不変の
特徴ベクトル
二.SURFアルゴリズム論
(ブックは非常に明確であるという点で、ここではそれらを繰り返しません)
三.APIはじめに
cv::xfeatures2d::SURF::creat(double HessianThreshold = 100.
int nOctaves = 4,
int nOctaveLayers = 3,
bool extend = false,
bool upright = false
)
//upright = 0 表示计算选择不变性,1表示不计算,速度更快
//HessianThreshold默认值在300——500之间
//nOctaves = 4 表示四个尺度空间
//nOctaveLayers 表示每个尺度的层数
drawKeypoints()函数
//(书上讲的很详细,看书即可)
IV。ソース(ブックと比較して、別の場所への注意を払います)
#include <opencv2/core/core.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/highgui/highgui.hpp>
#include<opencv2/xfeatures2d/nonfree.hpp>
#include <iostream>
using namespace cv;
using namespace std;
using namespace xfeatures2d;
int main(int argc, char** argv)
{
//【0】改变console字体颜色
system("color 2F");
//【1】载入源图片并显示
Mat srcImage1 = imread("E:\\pictures\\27.jpg", 1);
Mat srcImage2 = imread("E:\\pictures\\28.jpg", 1);
if (!srcImage1.data || !srcImage2.data)//检测是否读取成功
{
printf("读取图片错误! \n"); return false;
}
imshow("原始图1", srcImage1);
imshow("原始图2", srcImage2);
//【2】定义需要用到的变量和类
int minHessian = 400;//定义SURF中的hessian阈值特征点检测算子
Ptr<SURF> detector = SURF::create(minHessian); //指针数组
vector<KeyPoint> keypoints_1, keypoints_2;//vector模板类是能够存放任意类型的动态数组,能够增加和压缩数据
//【3】调用detect函数检测出SURF特征关键点,保存在vector容器中
detector->detect(srcImage1, keypoints_1);
detector->detect(srcImage2, keypoints_2);
//【4】绘制特征关键点.
Mat img_keypoints_1; Mat img_keypoints_2;
drawKeypoints(srcImage1, keypoints_1, img_keypoints_1, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
drawKeypoints(srcImage2, keypoints_2, img_keypoints_2, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
//【5】显示效果图
imshow("特征点检测效果图1", img_keypoints_1);
imshow("特征点检测效果图2", img_keypoints_2);
waitKey(0);
return 0;
}
出力: