用
sift实现的简单视频去抖动
python代码
最近写了一个简单的去抖动代码,主要是了解了
sift返回值的结构。代码里面用的是序列
图像,如果要做视频去抖可以换成视频
import cv2 as cv
import glob
import os
import numpy as np
# 1.使用
SIFT算子
检测角点
#
图像所在文件夹及
图像文件名获取
img_path = r'E:\HUMAN\frames\rgb/'
fileList = glob.glob(img_path + '/*.jpg')
之前折腾过一段时间配准发现自己写的一点都不准,最近需要进行图像的拼接,偶然的机会查到了opencv原来有拼接的库,发现opencv处理配准之外还做了许多的操作,就这个机会查找了相关的资料,同时也研究了以下他的源代码,做一个简单的总结。
Stitching
因为OpenCV已经将算法进行了高度的封装,所以用起来跟OpenGL类似,遵循了一条管线进行处理。
上图是OpenCV官方网站中提供的流程图。
从这个图中我们也能看出这是一个很复杂的过程,源代码中提到了七个部分:
Features Finding an
文章目录1. 全景图像拼接1.1 基本介绍1.2 图像拼接整体流程1.3 基本原理1.3.1 特征匹配算法1.3.1 RANSAC算法1.3.1.1 RANSAC算法基本思想1.3.1.2 RANSAC 求解单应矩阵1.3.2 APAP算法1.3.2.1算法流程:1.3.3 寻找最佳拼接缝(Seam Finding)1.3.3.1 使用最大流最小割算法寻找拼接缝1.3.4 根据multi-band bleing策略实现图像融合2. 实验过程2.1 实验代码2.2 实验结果及分析
1. 全景图像拼接
# 检测关键点和描述符
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)
# 创建 BFMatcher 匹配器
bf = cv2.BFMatcher()
# 匹配描述符
matches = bf.knnMatch(des1, des2, k=2)
# 应用比率测试
good_matches = []
for m, n in matches:
if m.distance < 0.75 * n.distance:
good_matches.append([m])
# 绘制匹配结果
img3 = cv2.drawMatchesKnn(img1, kp1, img2, kp2, good_matches, None, flags=2)
# 显示结果
cv2.imshow('Matches', img3)
cv2.waitKey(0)
cv2.destroyAllWindows()
希望这可以帮助你!