本篇所述为KLT光流跟踪两个视频中匹配特征点对的具体实现。=> 源码见Github openCV版本:4.5.5
sift=cv2.SIFT_create() # ORB_create()
kp,d=sift.detectAndCompute(frame_gray, None)
OpenCV-Python Tutorials-Feature Detection and Description
关于匹配后的下标决定说明 kp1的索引由DMatch对象属性为queryIdx决定
角点:某一点在任意方向的一个微小变动都会引起灰度很大的变化。
角点检测算法分类:
基于模板的方法主要考虑像素邻域点的灰度变化
,即图像亮度的变化。将与邻点亮度对比足够大的点定义为角点。常见的基于模板的角点检测算法有 Kitchen-Rosenfeld角点检测算法
、Harris角点检测算法
、KLT角点检测算法
、SUSAN角点检测算法
。
cv2.cornerHarris()
(Harris角点检测的进阶版)
cv2.goodFeaturesToTrack()
void cv::goodFeaturesToTrack(
cv::InputArray image, // 输入图像(CV_8UC1 CV_32FC1)
cv::OutputArray corners, // 输出角点vector
int maxCorners, // 最大角点数目
double qualityLevel, // 质量水平系数(小于1.0的正数,一般在0.01-0.1之间)
double minDistance, // 最小距离,小于此距离的点忽略
// 以下为可选参数
cv::InputArray mask = noArray(), //指定感兴趣区域。 mask=0的点忽略
int blockSize = 3, // 使用的邻域数:计算协方差矩阵时的窗口大小
bool useHarrisDetector = false, // false ='Shi Tomasi metric'
double k = 0.04 // Harris角点检测时使用
);
// 常用如下参数:
void cv::goodFeaturesToTrack(image,corner,
500, // 最多检测到的角点数
0.01, // 阈值系数
10); // 角点间的最小距离
角点特征检测之一(cornerHarris、Shi-Tomasi、FAST)
参考:
cv2.GFTTDetector_create将角点作为特征点进行特征匹配
【Shi-Tomasi角点检测+SIFT特征匹配】返回值需要进行一个转换
# size是内格点数,输出有序,按行展开
st1,corner1=cv2.findChessboardCorners(frame1gray,(9,6),None) #
当检测到了给定size的角点,st才会返回非0值
更详细的函数说明:角点检测与FindChessboardCorners函数
python 3+opencv3.4 – 特征匹配
Python OpenCV 特征点检测与匹配
关于不是很熟的只适用于SIFT/SURF的FLANN匹配 & 一个很好的学习openCV的博客
从0计算响应值并进行匹配
函数说明&完整实现(删除静止点)
lk_params=dict(winSize=(15,15),
maxLevel=2,
criteria=(cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03))
tk2,st,err=cv2.calcOpticalFlowPyrLK(frame2gray,frame_nxgray2,track_points2,None,**lk_params)
python-openCV官方文档对于该函数的详解
KLT里的默认是Shi-Tomasi 角点检测,也可以换成fast cv2.FastFeatureDetector()
,参考:光流算法学习
知乎链- 静止点&回溯判断
类的写法&直接写法
注意提取特征点的 类型和数据转换-Github
C++版本实现
特征点检测方法换成sift的过程中,注意特征点形式的转换过程中的数据形式dtype转换
error: (-215:Assertion failed) (npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0 in function
YOLOv3载入权重报错 (opencv版本不同引起的输出格式不同)
output_layers=[layer_names[i[0]-1] for i in net.getUnconnectedOutLayers()] IndexError: invalid index to scalar variable.