小白记录:《Opencv3 编程入门》P403关于Opencv扩展模块版本的差别

在Opencv3之后的版本,关于SURF特征点检测,除了头文件中模块的改变之外,还有程序用法的改变。(运行这个程序时,我用的VS2019+Opencv4.1.1)

不同之处:
头文件中模块的位置改变了
增加xfeatures2d命名空间(否则会显示未定义标识符SURF)
③SurfFeatureDetector detector(minHessian) 改成:
Ptr detector = SURF::create(minHessian);
④detector.detect( srcImage1, keypoints_1 );
detector.detect( srcImage2, keypoints_2 ); 改成:
detector->detect(srcImage1, keypoints_1);
detector->detect(srcImage2, keypoints_2);

一.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()函数
//(书上讲的很详细,看书即可)

四.源码(与书上进行比较,注意不同的地方)

#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;
}

输出结果:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

boss-dog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值