使用opencv的视频稳定 [英] video stabilization using opencv
问题描述
我试图用opencv(没有opencv视频稳定类)进行视频稳定。
I am trying to do video stabilization with opencv(without the opencv video stabilization class).
我的算法的步骤如下 - >
the steps for my algo is as follows->
-
冲浪点提取,
Surf points extraction,
匹配
同质性矩阵,
warpPerspective
warpPerspective
输出视频不稳定,它只是看起来像原来的视频,我找不到和参考代码的视频稳定我按照描述这里。任何人都可以帮助我告诉我在哪里我错了或提供我一些源代码链接
And the output video is not stabilized at all :(. it just looks like the original video. I could not find and reference code for video stabilization. I followed the procedure described here . Can anybody help me out by telling me where I am going wrong or provide me some source code link to improve my algo.
请帮助。
推荐答案
您可以使用我的代码段作为起点(不是很稳定,但似乎它的工作原理):
You can use my code snippet as a start point (not very stable but seems it works):
#include "opencv2/opencv.hpp"
#include <iostream>
#include <vector>
#include <stdio.h>
using namespace cv;
using namespace std;
int main(int ac, char** av)
{
VideoCapture capture(0);
namedWindow("Cam");
namedWindow("Camw");
Mat frame;
Mat frame_edg;
Mat prev_frame;
int k=0;
Mat Transform;
Mat Transform_avg=Mat::eye(2,3,CV_64FC1);
Mat warped;
while(k!=27)
{
capture >> frame;
cv::cvtColor(frame,frame,cv::COLOR_BGR2GRAY);
cv::equalizeHist(frame,frame);
cv::Canny(frame,frame_edg,64,64);
//frame=frame_edg.clone();
imshow("Cam_e",frame_edg);
imshow("Cam",frame);
if(!prev_frame.empty())
{
Transform=estimateRigidTransform(frame,prev_frame,0);
Transform(Range(0,2),Range(0,2))=Mat::eye(2,2,CV_64FC1);
Transform_avg+=(Transform-Transform_avg)/2.0;
warpAffine(frame,warped,Transform_avg,Size( frame.cols, frame.rows));
imshow("Camw",warped);
}
if(prev_frame.empty())
{
prev_frame=frame.clone();
}
k=waitKey(20);
}
cv::destroyAllWindows();
return 0;
}
您也可以寻找纸:Chen_Halawa_Pang_FastVideoStabilization.pdf as remeber there are MATLAB源代码。
You can also look for paper: Chen_Halawa_Pang_FastVideoStabilization.pdf as I remeber there was MATLAB source code supplied.
这篇关于使用opencv的视频稳定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!