\(
\newcommand{\P}[]{\unicode{xB6}}
\newcommand{\AA}[]{\unicode{x212B}}
\newcommand{\empty}[]{\emptyset}
\newcommand{\O}[]{\emptyset}
\newcommand{\Alpha}[]{Α}
\newcommand{\Beta}[]{Β}
\newcommand{\Epsilon}[]{Ε}
\newcommand{\Iota}[]{Ι}
\newcommand{\Kappa}[]{Κ}
\newcommand{\Rho}[]{Ρ}
\newcommand{\Tau}[]{Τ}
\newcommand{\Zeta}[]{Ζ}
\newcommand{\Mu}[]{\unicode{x039C}}
\newcommand{\Chi}[]{Χ}
\newcommand{\Eta}[]{\unicode{x0397}}
\newcommand{\Nu}[]{\unicode{x039D}}
\newcommand{\Omicron}[]{\unicode{x039F}}
\DeclareMathOperator{\sgn}{sgn}
\def\oiint{\mathop{\vcenter{\mathchoice{\huge\unicode{x222F}\,}{\unicode{x222F}}{\unicode{x222F}}{\unicode{x222F}}}\,}\nolimits}
\def\oiiint{\mathop{\vcenter{\mathchoice{\huge\unicode{x2230}\,}{\unicode{x2230}}{\unicode{x2230}}{\unicode{x2230}}}\,}\nolimits}
\)
OpenCV is a very popular computer vision and image processing library.
There are bindings for C++, Java, JavaScript, and Python
Installation
Free algorithms only
pip install opencv-contrib-python
Non-free Algorithms
You need to compile OpenCV from source alongside OpenCV-contrib .
Expand Compile opencv-contrib-python
You can build a wheel to install which includes NONFREE modules as follows:
sudo apt install -y libavcodec-dev libavformat-dev libswscale-dev
sudo apt install -y libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
sudo apt install -y libpng-dev libjpeg-dev libopenexr-dev libtiff-dev libwebp-dev libjasper-dev
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install -y libjasper1 libjasper-dev
# sudo apt install -y tesseract-ocr* liblept5 leptonica-progs libleptonica-dev
Setup a build environment
conda create -n opencvbuild python = 3 .7
conda activate opencvbuild
conda install -c conda-forge pyqt
git clone --recurse-submodules git@github.com:skvark/opencv-python.git
cd opencv-python
export ENABLE_CONTRIB = 1
export CMAKE_ARGS = "-DOPENCV_ENABLE_NONFREE=ON -DWITH_QT=5"
python setup.py bdist_wheel
Expand Compilation Instructions
See https://www.pyimagesearch.com/2018/08/15/how-to-install-opencv-4-on-ubuntu for instructions.
cd ~
git clone git@github.com:opencv/opencv.git
git clone git@github.com:opencv/opencv_contrib.git
cd opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D PYTHON3_EXECUTABLE=~/anaconda3/envs/tf2/bin/python \
-D PYTHON3_INCLUDE_DIRS=~/anaconda3/envs/tf2/python3.7m \
-D PYTHON3_LIBRARIES=~/anaconda3/envs/tf2/lib/libpython3.7m.so \
-D BUILD_EXAMPLES=ON ..
make -j16
sudo make install
sudo ldconfig
Usage
Getting Started
import cv2
# cv2.IMREAD_ANYCOLOR = 4
# cv2.IMREAD_ANYDEPTH = 2
# cv2.IMREAD_COLOR = 1
# cv2.IMREAD_GRAYSCALE = 0
# Use cv2.IMREAD_GRAYSCALE to read in grayscale
my_image = cv2 . imread ( "my_image.png" , cv2 . IMREAD_GRAYSCALE )
# Perform some modification
# Do your machine learning here
# Write your output image
cv2 . imwrite ( "my_modified_image.png" , my_image )
Resizing an Image
Reference
import numpy as np
import cv2
img = cv2.imread( 'messi5.jpg' )
new_img = cv2.resize( img, ( 500 ,200) , interpolation = cv.INTER_CUBIC)
Video
Reading Video
video_capture = cv2 . VideoCapture ( path . join ( videos_folder , video_filename ))
if not video_capture . isOpened ():
print ( "Error opening video stream or file" )
sys . exit ( 0 )
frame_num = 0
while video_capture . isOpened () and frame_num < 30 :
ret , frame = video_capture . read ()
if ret :
cv2 . imshow ( 'Frame' , frame )
frame_num = frame_num + 1
if cv2 . waitKey ( 25 ) & 0xFF == ord ( 'q' ):
break
else :
break
Parameters
# Resolution
width = int ( video_capture . get ( cv2 . CAP_PROP_FRAME_WIDTH ))
height = int ( video_capture . get ( cv2 . CAP_PROP_FRAME_HEIGHT ))
total_frames = int ( video_capture . get ( cv2 . CAP_PROP_FRAME_COUNT ))
frame_pos = int ( video_capture . get ( cv2 . CAP_PROP_POS_FRAMES ))
Writing Video
C++ Video Write
Note that OpenCV does not handle audio.
output_video = cv2.VideoWriter()
codec = cv2.VideoWriter_fourcc( *"avc1" )
fps = 15
image_size = ( 100 , 100 )
output_video.open( "video_output.mp4" , codec, fps, image_size, True)
if not output_video.isOpened() :
print( "Error opening output video" )
# Write all of your frames
# while have_frames:
# output_video.write(my_frame)
# Release the video
output_video.release()
Resources