OpenCV杂谈_12
一. 需要做的前期准备
环境配置: Python版本:3.7 功能包:opencv-python(3.4.2.16) 常识须知: ORB是什么?为什么要用ORB? ORB 是 Oriented Fast and Rotated Brief 的简称,可以用来对图像中的关键点快速创建特征向量,这些特征向量可以用来识别图像中的对象。ORB 的特点是速度非常快 ,而且在一定程度上不受噪点和图像变换的影响 ,例如旋转和缩放变换等。而且免费。 文件夹配置 一个用的顺手的IDE(由于是Python项目,本人推荐Pycharm)
二. 源码如下:
import cv2
img1 = cv2. imread( "ImageQuery/JUMANJI.png" , 0 )
img2 = cv2. imread( "ImageTrain/2.png" , 0 )
orb = cv2. ORB_create( nfeatures= 1000 )
kp1, des1 = orb. detectAndCompute( img1, None )
kp2, des2 = orb. detectAndCompute( img2, None )
imgKp1 = cv2. drawKeypoints( img1, kp1, None )
imgKp2 = cv2. drawKeypoints( img2, kp2, None )
bf = cv2. BFMatcher( )
matches = bf. knnMatch( des1, des2, k= 2 )
good = [ ]
for m, n in matches:
if m. distance < 0.75 * n. distance:
good. append( [ m] )
print ( len ( good) )
img3 = cv2. drawMatchesKnn( img1, kp1, img2, kp2, good, None , flags= 2 )
cv2. imshow( "match" , img3)
cv2. waitKey( 0 )
三. 结果展示
四. 感悟与分享
Matching一直以来是计算机视觉的一大重要研究方向,其用途可以在高精度的基础上得到大大地延伸。 比如:1. 分类检测任务 :当你已经知道上图左半部分内容的分类属性是JUMANJI游戏光盘,那你完全可以根据其特征点的匹配情况,来判断另一个物体的分类属性是不是JUMANJI游戏光盘。这相比于使用基于深度学习的物体识别方法来说,具有更少的计算量、训练量,但也难免会降低一些精度和适用性。因此可以用在一些不需要大量样本的、较为单调的分类任务。2. 追踪任务 :一般的追踪算法(比如Camshift算法)是通过提取目标的颜色特征能够有效地对视频中的运动目标进行持续跟踪,并且可以自动调节搜索窗大小,从而提高运动目标跟踪的准确性。但是,当背景与运动目标颜色相近 或者背景复杂多变 的情况下,很容易发生跟踪失败 的情况,而此时就可以利用ORB算法找到在上一帧中跟踪失败的目标,然后再回到Camshift算法达到对目标连续跟踪的目的。 相关论文推荐: ORB算法论文原文:ORB: An efficient alternative to SIFT or SURF 基于ORB算法的追踪实现:基于ORB特征点匹配的改进Camshift运动目标跟踪算法
如有问题,敬请指正。欢迎转载,但请注明出处。