OpenCV: Difference between revisions
| (11 intermediate revisions by the same user not shown) | |||
| Line 13: | Line 13: | ||
** The [https://patents.google.com/patent/US6711293B1/en patent for SIFT] expired on March 6, 2020 so it might be added to opencv-contrib-python in a future update. | ** The [https://patents.google.com/patent/US6711293B1/en patent for SIFT] expired on March 6, 2020 so it might be added to opencv-contrib-python in a future update. | ||
** The [https://patents.google.com/patent/US20090238460A1/en patent for SURF] should expire around 2029. | ** The [https://patents.google.com/patent/US20090238460A1/en patent for SURF] should expire around 2029. | ||
* You can use <code>opencv-python</code> if you do not need extra contrib modules. | |||
=== Non-free Algorithms === | === Non-free Algorithms === | ||
You need to compile [https://github.com/opencv/opencv OpenCV] from source alongside [https://github.com/opencv/opencv_contrib OpenCV-contrib].<br> | You need to compile [https://github.com/opencv/opencv OpenCV] from source alongside [https://github.com/opencv/opencv_contrib OpenCV-contrib].<br> | ||
The easiest way is to use [https://github.com/opencv/opencv-python#manual-builds the automated script] to compile opencv-contrib-python.<br> | |||
{{hidden | Compile opencv-contrib-python | | {{hidden | Compile opencv-contrib-python | | ||
You can build a wheel to install which includes NONFREE modules as follows: | You can build a wheel to install which includes NONFREE modules as follows: | ||
| Line 25: | Line 26: | ||
sudo apt install -y libavcodec-dev libavformat-dev libswscale-dev | 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 libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev | ||
sudo apt install -y libpng-dev libjpeg-dev libopenexr-dev libtiff-dev libwebp | sudo apt install -y libpng-dev libjpeg-dev libopenexr-dev libtiff-dev libwebp-dev | ||
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main" | sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main" | ||
sudo apt update | sudo apt update | ||
| Line 79: | Line 80: | ||
import cv2 | import cv2 | ||
# cv2.IMREAD_ANYCOLOR | # cv2.IMREAD_ANYCOLOR | ||
# cv2.IMREAD_ANYDEPTH | # cv2.IMREAD_ANYDEPTH | ||
# cv2.IMREAD_COLOR | # cv2.IMREAD_COLOR | ||
# cv2.IMREAD_GRAYSCALE | # cv2.IMREAD_GRAYSCALE | ||
# cv2.IMREAD_UNCHANGED # G or BGR or BGRA | |||
# Use cv2.IMREAD_GRAYSCALE to read in grayscale | # Use cv2.IMREAD_GRAYSCALE to read in grayscale | ||
| Line 96: | Line 98: | ||
===Resizing an Image=== | ===Resizing an Image=== | ||
[https://docs.opencv.org/master/da/d6e/tutorial_py_geometric_transformations.html Reference] | [https://docs.opencv.org/master/da/d6e/tutorial_py_geometric_transformations.html Reference] | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="python"> | ||
# Resize to resolution | |||
new_img = cv2.resize(img, (500,200), interpolation=v2.INTER_CUBIC) | |||
# Resize by factor | |||
cv2.resize(img, (0, 0), fx=1/4, fy=1/4, interpolation=cv2.INTER_AREA) | |||
</syntaxhighlight> | |||
;Interpolation options | |||
* INTER_NEAREST | |||
* INTER_LINEAR | |||
* INTER_CUBIC | |||
* INTER_AREA | |||
* INTER_LANCZOS4 | |||
For downscaling, use `INTER_AREA` to avoid aliasing. However, `INTER_NEAREST` will give the the optimal speed.<br> | |||
For upscaling, use `INTER_CUBIC` for best results or `INTER_LINEAR` for best performance. | |||
===Face Detection=== | |||
[https://towardsdatascience.com/face-detection-in-2-minutes-using-opencv-python-90f89d7c0f81?gi=2fadb2dbc99d face detection in 2 minutes] | |||
# Download [https://raw.githubusercontent.com/kipr/opencv/master/data/haarcascades/haarcascade_frontalface_default.xml haarcascade_frontalface_default.xml] | |||
<syntaxhighlight lang="python"> | |||
face_cascade = cv2.CascadeClassifier( | |||
'haarcascade_frontalface_default.xml') | |||
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) | |||
faces = face_cascade.detectMultiScale(image_gray, 1.1, 4) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
| Line 155: | Line 176: | ||
output_video.release() | output_video.release() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==Algorithms== | |||
===Stereo Rectify=== | |||
This is a summary of the [https://docs.opencv.org/4.x/d9/d0c/group__calib3d.html#ga617b1685d4059c6040827800e72ad2b6 <code>cv2.stereoRectify</code>] function which produces a rectification rotation and projection matrix for calibrated cameras (i.e. cameras with known intrinsics and extrinsics). | |||
[https://github.com/opencv/opencv/blob/4.x/modules/calib3d/src/calibration.cpp#LL2561C6-L2561C21 source code] | |||
;Algorithm | |||
# Rotation calculation | |||
# Projection calculation | |||
# Bounding box calculation | |||
# Disparity-to-depth matrix calculation | |||
==Resources== | ==Resources== | ||
*[https://docs.opencv.org/master/d6/d00/tutorial_py_root.html OpenCV Python Tutorial] | *[https://docs.opencv.org/master/d6/d00/tutorial_py_root.html OpenCV Python Tutorial] | ||