# python_video_stab
**Repository Path**: dudu00joker/python_video_stab
## Basic Information
- **Project Name**: python_video_stab
- **Description**: A Python package to stabilize videos using OpenCV
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-06-14
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Python Video Stabilization
[](https://travis-ci.org/AdamSpannbauer/python_video_stab)
[](https://codecov.io/gh/AdamSpannbauer/python_video_stab)
[](https://codeclimate.com/github/AdamSpannbauer/python_video_stab/maintainability)
[](https://pypi.org/project/vidstab/)
[](https://github.com/AdamSpannbauer/python_video_stab/commits/master)
[](https://pepy.tech/project/vidstab)
Python video stabilization using OpenCV. Full [searchable documentation here](https://adamspannbauer.github.io/python_video_stab).
This module contains a single class (`VidStab`) used for video stabilization. This class is based on the work presented by Nghia Ho in [SIMPLE VIDEO STABILIZATION USING OPENCV](http://nghiaho.com/?p=2093). The foundation code was found in a comment on Nghia Ho's post by the commenter with username koala.
Input | Output
:-------------------------------:|:-------------------------:
 | 
*[Video](https://www.youtube.com/watch?v=9pypPqbV_GM) used with permission from [HappyLiving](https://www.facebook.com/happylivinginfl/)*
## Contents:
1. [Installation](#installation)
* [Install `vidstab` without installing OpenCV](#install-vidstab-without-installing-opencv)
* [Install vidstab & OpenCV](#install-vidstab-opencv)
2. [Basic Usage](#basic-usage)
* [Using from command line](#using-from-command-line)
* [Using VidStab class](#using-vidstab-class)
3. [Advanced Usage](#advanced-usage)
* [Plotting frame to frame transformations](#plotting-frame-to-frame-transformations)
* [Using borders](#using-borders)
* [Using Frame Layering](#using-frame-layering)
* [Stabilizing a frame at a time](#stabilizing-a-frame-at-a-time)
* [Working with live video](#working-with-live-video)
* [Transform File Writing & Reading](#transform-file-writing--reading)
## Installation
> ```diff
> + Please report issues if you install/try to install and run into problems!
> ```
### Install `vidstab` without installing OpenCV
If you've already built OpenCV with python bindings on your machine it is recommended to install `vidstab` without installing the pypi versions of OpenCV. The `opencv-python` python module can cause issues if you've already built OpenCV from source in your environment.
The below commands will install `vidstab` without OpenCV included.
#### From PyPi
```bash
pip install vidstab
```
#### From GitHub
```bash
pip install git+https://github.com/AdamSpannbauer/python_video_stab.git
```
### Install `vidstab` & OpenCV
If you don't have OpenCV installed already there are a couple options.
1. You can build OpenCV using one of the great online tutorials from [PyImageSearch](https://www.pyimagesearch.com/), [LearnOpenCV](https://www.learnopencv.com/), or [OpenCV](https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_setup/py_table_of_contents_setup/py_table_of_contents_setup.html#py-table-of-content-setup) themselves. When building from source you have more options (e.g. [platform optimization](https://www.pyimagesearch.com/2017/10/09/optimizing-opencv-on-the-raspberry-pi/)), but more responsibility. Once installed you can use the pip install command shown above.
2. You can install a pre-built distribution of OpenCV from pypi as a dependency for `vidstab` (see command below)
The below commands will install `vidstab` with `opencv-contrib-python` as dependencies.
#### From PyPi
```bash
pip install vidstab[cv2]
```
#### From Github
```bash
pip install -e git+https://github.com/AdamSpannbauer/python_video_stab.git#egg=vidstab[cv2]
```
## Basic usage
The `VidStab` class can be used as a command line script or in your own custom python code.
### Using from command line
```bash
# Using defaults
python3 -m vidstab --input input_video.mov --output stable_video.avi
```
```bash
# Using a specific keypoint detector
python3 -m vidstab -i input_video.mov -o stable_video.avi -k GFTT
```
### Using `VidStab` class
```python
from vidstab import VidStab
# Using defaults
stabilizer = VidStab()
stabilizer.stabilize(input_path='input_video.mov', output_path='stable_video.avi')
# Using a specific keypoint detector
stabilizer = VidStab(kp_method='ORB')
stabilizer.stabilize(input_path='input_video.mp4', output_path='stable_video.avi')
# Using a specific keypoint detector and customizing keypoint parameters
stabilizer = VidStab(kp_method='FAST', threshold=42, nonmaxSuppression=False)
stabilizer.stabilize(input_path='input_video.mov', output_path='stable_video.avi')
```
## Advanced usage
### Plotting frame to frame transformations
```python
from vidstab import VidStab
import matplotlib.pyplot as plt
stabilizer = VidStab()
stabilizer.stabilize(input_path='input_video.mov', output_path='stable_video.avi')
stabilizer.plot_trajectory()
plt.show()
stabilizer.plot_transforms()
plt.show()
```
Trajectories | Transforms
:-------------------------------:|:-------------------------:
 | 
### Using borders
```python
from vidstab import VidStab
stabilizer = VidStab()
# black borders
stabilizer.stabilize(input_path='input_video.mov',
output_path='stable_video.avi',
border_type='black')
stabilizer.stabilize(input_path='input_video.mov',
output_path='wide_stable_video.avi',
border_type='black',
border_size=100)
# filled in borders
stabilizer.stabilize(input_path='input_video.mov',
output_path='ref_stable_video.avi',
border_type='reflect')
stabilizer.stabilize(input_path='input_video.mov',
output_path='rep_stable_video.avi',
border_type='replicate')
```
|
|
|
|