opencv3.4.10编译及特征提取匹配


前言

OpenCV3.X时代以后,OpenCV将代码库分成了两部分,分别是稳定的核心功能库和试验性质的contrib库(Extra Modules)。并且从3.1以后,编译好的版本中就没有现成的x86平台的库,只有x64平台的,想用就必须自己从源码编译,之前都是直接下载编译好的版本。
opencv:https://github.com/opencv/opencv/releases
opencv_contrib:https://github.com/opencv/opencv_contrib/releases


一、编译opencv库

1.环境及准备

Windows 10
VisualStudio 2017
CMake 3.19
OpenCV核心库源码
OpenCV contrib库源码

2.编译及安装

1、直接使用vcpkg一键编译最简单。(vcpkg使用配置

.\vcpkg.exe install opencv3[contrib]:x86-windows
.\vcpkg.exe install opencv3[contrib]:x64-windows
.\vcpkg.exe export opencv3[contrib]:x86-windows opencv3[contrib]:x64-windows  --zip

已编译版本:https://download.csdn.net/download/qing666888/13780914

2、使用CMake配置成VS2017工程,使用VS2017编译。具体步骤百度一下。

二、特征提取匹配

1.特征检测算法

特征检测提取算法,其中 SIFT和SURF都是需要使用nonfree module模块,即需要编译上面的opencv contrib模块。

"FAST" – FastFeatureDetector
"STAR" – StarFeatureDetector
"SIFT" – SIFT (nonfree module)
"SURF" – SURF (nonfree module)
"ORB" – ORB
"BRISK" – BRISK
"MSER" – MSER
"GFTT" – GoodFeaturesToTrackDetector
"HARRIS" – GoodFeaturesToTrackDetector with Harris detector enabled
"Dense" – DenseFeatureDetector
"SimpleBlob" – SimpleBlobDetector

Harris:用于检测角点
SIFT:用于检测斑点
SURF:用于检测斑点
FAST:用于检测角点
BRIEF:用于检测斑点
ORB:代表带有方向的FAST算法与具有旋转不变性的BRIEF算法

Harris,FAST都是用来检测角点的
SIFT(中的DOG),SURF(中的Hessian)是检测斑点的(关键点区域)
BRIEF也是检测斑点的。
ORB特征是基于FAST和BRIEF算法的,也是一种检测特征的算法

2.特征匹配算法

暴力匹配法
FLANN的匹配法

ORB特征匹配、K近邻特征匹配都是用暴力匹配法作为匹配器(BFMatcher )的

暴力匹配法由BFMatcher对象实现暴力匹配:

bf = cv2.BFMatcher(cv2.NORM_HAMMING,crossCheck = True)
matches = bf.match(des1,des2)

FLANN算法由FlannBasedMatcher实现:

flann = cv2.FlannBasedMatcher(indexParams,searchParams)
matches = flann.knnMatch(des1,des2,k = 2)

暴力匹配多用于orb特征的匹配中:

orb = cv2.ORB_create()
kp1,des1 = orb.detectAndCompute(img1,None)
kp2,des2 = orb.detectAndCompute(img2,None)

FLANN多用于SIFT特征的匹配中:

sift = cv2.xfeatures2d.SIFT_create()
kp1,des1 = sift.detectAndCompute(queryImage,None)
kp2,des2 = sift.detectAndCompute(trainingImage,None)

上述代码非qt版本。


3.测试工程

效果如下,代码直接下载工程源码:
在这里插入图片描述
原图奉上,基于Qt的工程,使用SIFT特征提取算法,FLANN匹配算法。
在这里插入图片描述
代码如下:https://download.csdn.net/download/qing666888/13950031


总结

使用opencv进行图像识别检测的大概流程,首先对两张图片使用对应的检测算法,检测出图片的特征点,然后使用合适的特征匹配算法,判断两张待检测图片的特征点匹配情况。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页