OpenCV SIFT特征算法详解与使用

opencv4.4版本以后已经把sift跟surf特征提取又重新get回来了,可以不需要编译opencv源码,直接下载官方预编译版本的就可以直接使用了。但是很多人还以为必须要编译源码才能使用sift特征检测的函数!如果还不知道sift特征是什么,就看这里的这篇文章就好啦。
opencv sift特征算法详解与使用
01
创建sift特征提取器
下面就来验证一下是否真的可以了,请看步骤与过程,首先创建sift特征提取器,实现特征点跟描述子的提取,代码实现如下:
// 创建sift特征提取auto detector = sift::create();vector keypoints_obj, keypoints_sence;mat descriptors_box, descriptors_sence;detector->detectandcompute(box, mat(), keypoints_obj, descriptors_box);detector->detectandcompute(scene, mat(), keypoints_sence, descriptors_sence);std::cout << box keypoints: << keypoints_obj.size() << std::endl;std::cout << scene keypoints: << keypoints_sence.size() 03
单应性矩阵求解与透视变换
这里不再赘述,这部分的代码实现如下:
// 抽取匹配描述子对应的关键点std::vector obj_pts;std::vector scene_pts;for (size_t i = 0; i < matches.size(); i++){    obj_pts.push_back(keypoints_obj[matches[i].queryidx].pt);    scene_pts.push_back(keypoints_sence[matches[i].trainidx].pt);}// 对象对齐与单应性矩阵求解mat h = findhomography(obj_pts, scene_pts, ransac);std::vector obj_corners(4);obj_corners[0] = point(0, 0); obj_corners[1] = point(box.cols, 0);obj_corners[2] = point(box.cols, box.rows); obj_corners[3] = point(0, box.rows);std::vector scene_corners(4);perspectivetransform(obj_corners, scene_corners, h); 04
box矩形框绘制
求得最终的位置信息,根据得到四个点坐标通过多边形绘制函数,完成绘制,这个其中有必要重点解释一下多边形绘制函数
void cv::polylines ( inputoutputarray img, inputarrayofarrays pts, bool isclosed, const scalar & color, int thickness = 1, int linetype = line_8, int shift = 0)
参数解释如下
img表示输入图像
pts表示绘制的多边形顶点集合,必须是int类型cv_32sc
isclosed表示是否闭合
color表示多边形颜色
thickness表示线宽,注意:必须大于等于零,如果想要填充它,请用drawcontours
linetype表示对线的渲染方式
shift表示迁移,默认为0。这个在roi上绘制时候有用
实现代码如下:


一文盘点ADAS处理器芯片
基于碳点修饰的光电化学生物传感器实现可见光下检测葡萄糖浓度
面粉麸皮重金属检测仪功能特点介绍
AirFuel高层出席台北ITRI“无线电能传输结合5G新应用研讨会”
超声波测距仪的制作图解
OpenCV SIFT特征算法详解与使用
华为DriveONE动力域解决方案为用户打造极致驾驶体验
基于智能电网和高级量测体系实现智能用户端的设计
智能家居不能一“屏”控制,智能手机无法承受之重
pcm编译码器电路图
浅析大数据技术之Flink
线性直流电源的操作注意事项
如何区别碳锌电池和碱性电池?
促使EDA行业高速增长的原因分析
VOC监测仪的功能特点有哪些
三运放仪表放大器的放大倍数分析
带着手机就能出差——PeakDo毫米波投屏让手机秒变电脑
一加电视曝光 采用8只杜比Atmos扬声器
智能体感试衣镜将如何解决服装店的试装难题
如何才能为电源选择正确的工作频率?