纹身网站建设案例,营销型企业网站建设ppt,万网域名怎么绑定网站,我有网站 怎么做淘宝推广python使用opencv计算SIFT特征点的示例前言潜在的问题记录demo1#xff1a;计算并绘制特征点demo2#xff1a;使用SIFT匹配两幅图像参考文章地址前言
SIFT#xff08;Scale-invariant feature transform#xff09;是2004年提出的#xff0c;至今已经经受住各种考验…
python使用opencv计算SIFT特征点的示例前言潜在的问题记录demo1计算并绘制特征点demo2使用SIFT匹配两幅图像参考文章地址前言
SIFTScale-invariant feature transform是2004年提出的至今已经经受住各种考验被证实是在同类描述子中具有很强健壮性的算法。 SIFT既是一种特征点检测算法也同时提供特征点的描述子。
本文使用两个示例简单介绍在python下如何使用opencv计算SIFT特征点
完整代码及更多算法demo见我最近开始构建的 AI ToolBox
我建立 AI ToolBox 的初衷是将工作学习中编写的代码中可复用的部分总结起来组成一个工具箱提高工作中尝试算法的时间成本。希望也能对大家有用我会持续的进行更新
下面进入正题
潜在的问题记录
由于SIFT及SURF等特征点检测算法已经申请专利其算法实习是独立于opencv之外的
因此(假设你已经安装了opencv)你在搜索网上教程尝试使用SIFT算法时你可能遇到下面的问题
’module’ object has no attribute xfeatures2d’
这是由于你没有安装 opencv-contrib-python 库导致的解决方法
pip install opencv-contrib-python但愿程序已正常运行但是取决于你的各种版本配置你还可能遇到这样的问题
…Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function cv::xfeatures2d::SIFT::create’
在 stackflow 上可以找到该问题的若干解决办法
由于我猜测这是和版本相关的问题我是用如下方法解决的很简单。
先卸载 opencv 和 opencv-contrib-python 再重新安装统一版本的两个库。依此输入如下命令
pip uninstall opencv-python
pip uninstall opencv-contrib-python
pip install opencv-python3.3.0.10
pip install opencv-contrib-python3.3.0.10demo1计算并绘制特征点
我们先来简单感受一下SIFT在做什么
调用很简单
使用detectAndCompute方法检测特征点
使用drawKeypoints将特征点绘制处理
# -*- coding: utf-8 -*-Created on Thu Nov 8 15:34:41 2018SIFT特征点检测demo1
计算SIFT特征点并绘制于图像中author: zyb_as
import cv2# 1) 以灰度图的形式读入图片
psd_img_1 cv2.imread(jgz1.jpg, cv2.IMREAD_GRAYSCALE)# 2) SIFT特征计算
# 初始化detector
sift cv2.xfeatures2d.SIFT_create()
# 检测特征点
psd_kp1, psd_des1 sift.detectAndCompute(psd_img_1, None)# 3) 绘制特征点
#画出特征点
im_keypoint cv2.drawKeypoints(psd_img_1, psd_kp1, psd_img_1, flags cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow(image, im_keypoint)#展示图片
cv2.waitKey(0)#等待按键按下
cv2.destroyAllWindows()#清除所有窗口结果如下
demo2使用SIFT匹配两幅图像
我们可以用SIFT点做些什么呢
最常见的应用有图像拼接、模板匹配等
在demo2中我们假设这样的应用场景 已有一张人脸模板在另一幅图像中尝试判断其中是否包含这个人的脸。
核心思路是
1使用SIFT分别检测图片和模板的特征点
2对两组特征点进行KNN匹配
3使用RANSAC剔除误匹配的点对
4通过最后留下的配对成功的点对的数量通过一个阈值判断图像中是否出现了模板人脸对应的同一个人
这里我们对前两部进行实现练习
代码详见AI ToolBox中的sift_demo2.py
看下效果 可以看到强大的SIFT描述子可以很好的匹配出两幅图中的同一个人即使是像金馆长这种已经被做成表情包的例子都可以匹配成功。 同时对于不是同一个人的情况即使都是人都有同样人类的面部结构SIFT也能够进行很好的区分。
参考文章地址
David G.Lowe Distinctive Image Features from Scale-Invariant Keypoints. January 5, 2004.
Python-opencv3 SIFT算法做特征匹配
Python进行SIFT图像对准
SIFT算法详解
SIFT detector and descriptor