0% found this document useful (0 votes)
85 views

Opencv Cheatsheet PDF

The document provides a summary of key classes, functions and concepts in OpenCV for computer vision and image processing. It lists common OpenCV classes like Point, Mat, Scalar and operations like filtering, warping and reading/writing images. It also provides examples of using OpenCV for tasks like filtering an image, reading/writing parameters to file storage and calibrating cameras.

Uploaded by

Neemias Monteiro
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
85 views

Opencv Cheatsheet PDF

The document provides a summary of key classes, functions and concepts in OpenCV for computer vision and image processing. It lists common OpenCV classes like Point, Mat, Scalar and operations like filtering, warping and reading/writing images. It also provides examples of using OpenCV for tasks like filtering an image, reading/writing parameters to file storage and calibrating cameras.

Uploaded by

Neemias Monteiro
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 2

OpenCV 2.

4 Cheat Sheet (C++)


The OpenCV C++ reference manual is here:
http: // docs. opencv. org . Use Quick Search to nd
descriptions of the particular functions and classes

Key OpenCV Classes


Point_
Point3_
Size_
Vec
Matx
Scalar
Rect
Range
Mat

SparseMat
Ptr

Template 2D point class


Template 3D point class
Template size (width, height) class
Template short vector class
Template small matrix class
4-element vector
Rectangle
Integer value range
2D or multi-dimensional dense array
(can be used to store matrices, images,
histograms, feature descriptors, voxel
volumes etc.)
Multi-dimensional sparse array
Template smart pointer class

Mat dyImage(image.size(), image.type());


for(int y = 1; y < image.rows-1; y++) {
Vec3b* prevRow = image.ptr<Vec3b>(y-1);
Vec3b* nextRow = image.ptr<Vec3b>(y+1);
for(int x = 0; x < image.cols; x++)
for(int c = 0; c < 3; c++)
dyImage.at<Vec3b>(y,x)[c] =
saturate_cast<uchar>(
nextRow[x][c] - prevRow[x][c]);
}
Mat_<Vec3b>::iterator it = image.begin<Vec3b>(),
itEnd = image.end<Vec3b>();
for(; it != itEnd; ++it)
(*it)[1] ^= 255;

Matrix Manipulations: Copying,


Shuing, Part Access

src.copyTo(dst)
Copy matrix to another one
src.convertTo(dst,type,scale,shift) Scale and convert to
another datatype
m.clone()
Make deep copy of a matrix
Create a matrix
m.reshape(nch,nrows)
Change matrix dimensions and/or numMat image(240, 320, CV_8UC3);
ber of channels without copying data
[Re]allocate a pre-declared matrix
m.row(i),
m.col(i)
Take a matrix row/column
image.create(480, 640, CV_8UC3);
m.rowRange(Range(i1,i2)) Take a matrix row/column span
Create a matrix initialized with a constant
m.colRange(Range(j1,j2))
Mat A33(3, 3, CV_32F, Scalar(5));
m.diag(i)
Take a matrix diagonal
Mat B33(3, 3, CV_32F); B33 = Scalar(5);
m(Range(i1,i2),Range(j1,j2)),Take a submatrix
Mat C33 = Mat::ones(3, 3, CV_32F)*5.;
m(roi)
Mat D33 = Mat::zeros(3, 3, CV_32F) + 5.;
m.repeat(ny,nx)
Make a bigger matrix from a smaller one
Create a matrix initialized with specied values
flip(src,dst,dir)
Reverse the order of matrix rows and/or
double a = CV_PI/3;
columns
Mat A22 = (Mat_<float>(2, 2) 
split(...)
Split multi-channel matrix into separate
cos(a), -sin(a), sin(a), cos(a));
channels
float B22data[] = {cos(a), -sin(a), sin(a), cos(a)};
merge(...)
Make a multi-channel matrix out of the
Mat B22 = Mat(2, 2, CV_32F, B22data).clone();
separate channels
Initialize a random matrix
mixChannels(...)
Generalized form of split() and merge()
randu(image, Scalar(0), Scalar(256)); // uniform dist
randShuffle(...)
Randomly shue matrix elements
randn(image, Scalar(128), Scalar(10)); // Gaussian dist

Matrix Basics

Convert matrix to/from other structures


(without copying the data)

Example 1. Smooth image ROI in-place


Mat imgroi = image(Rect(10, 20, 100, 100));
Mat image_alias = image;
GaussianBlur(imgroi, imgroi, Size(5, 5), 1.2, 1.2);
float* Idata=new float[480*640*3];
Example 2. Somewhere in a linear algebra algorithm
Mat I(480, 640, CV_32FC3, Idata);
m.row(i) += m.row(j)*alpha;
vector<Point> iptvec(10);
Example 3. Copy image ROI to another image with conversion
Mat iP(iptvec); // iP  10x1 CV_32SC2 matrix
Rect r(1, 1, 10, 20);
IplImage* oldC0 = cvCreateImage(cvSize(320,240),16,1);
Mat dstroi = dst(Rect(0,10,r.width,r.height));
Mat newC = cvarrToMat(oldC0);
src(r).convertTo(dstroi, dstroi.type(), 1, 0);
IplImage oldC1 = newC; CvMat oldC2 = newC;

... (with copying the data)

Mat newC2 = cvarrToMat(oldC0).clone();


vector<Point2f> ptvec = Mat_<Point2f>(iP);

Access matrix elements

A33.at<float>(i,j) = A33.at<float>(j,i)+1;

Simple Matrix Operations

OpenCV implements most common arithmetical, logical and


other matrix operations, such as

add(), subtract(), multiply(), divide(), absdiff(),

bitwise_and(), bitwise_or(), bitwise_xor(), max(),


min(), compare()
 correspondingly, addition, subtraction, element-wise
multiplication ... comparison of two matrices or a
matrix and a scalar.
Example. Alpha compositing function:
void alphaCompose(const Mat& rgba1,
const Mat& rgba2, Mat& rgba_dest)
{
Mat a1(rgba1.size(), rgba1.type()), ra1;
Mat a2(rgba2.size(), rgba2.type());
int mixch[]={3, 0, 3, 1, 3, 2, 3, 3};
mixChannels(&rgba1, 1, &a1, 1, mixch, 4);
mixChannels(&rgba2, 1, &a2, 1, mixch, 4);
subtract(Scalar::all(255), a1, ra1);
bitwise_or(a1, Scalar(0,0,0,255), a1);
bitwise_or(a2, Scalar(0,0,0,255), a2);
multiply(a2, ra1, a2, 1./255);
multiply(a1, rgba1, a1, 1./255);
multiply(a2, rgba2, a2, 1./255);
add(a1, a2, rgba_dest);
}

sum(), mean(), meanStdDev(), norm(), countNonZero(),

minMaxLoc(),
 various statistics of matrix elements.
exp(), log(), pow(), sqrt(), cartToPolar(),
polarToCart()
 the classical math functions.
scaleAdd(), transpose(), gemm(), invert(), solve(),
determinant(), trace(), eigen(), SVD,
 the algebraic functions + SVD class.
dft(), idft(), dct(), idct(),
 discrete Fourier and cosine transformations
For some operations a more convenient algebraic notation can
be used, for example:
Mat delta = (J.t()*J + lambda*
Mat::eye(J.cols, J.cols, J.type()))
.inv(CV_SVD)*(J.t()*err);
implements the core of Levenberg-Marquardt optimization
algorithm.

Image Processsing
Filtering

filter2D()
sepFilter2D()
boxFilter(),
GaussianBlur(),
medianBlur(),
bilateralFilter()
Sobel(), Scharr()
Laplacian()
erode(), dilate()

Non-separable linear lter


Separable linear lter
Smooth the image with one of the linear
or non-linear lters
Compute the spatial image derivatives
2I
2I
compute Laplacian: I = x
2 + y 2
Morphological operations

Example. Filter image in-place with a 3x3 high-pass kernel


(preserve negative responses by shifting the result by 128):
filter2D(image, image, image.depth(), (Mat_<float>(3,3)
-1, -1, -1, -1, 9, -1, -1, -1, -1), Point(1,1), 128);

FileStorage fs("test.yml", FileStorage::WRITE);


cap  frame; if(!frame.data) break;
fs  "i"  5  "r"  3.1  "str"  "ABCDEFGH";
imshow("video", frame); if(waitKey(30) >= 0) break;
fs  "mtx"  Mat::eye(3,3,CV_32F);
}
fs  "mylist"  "["  CV_PI  "1+1" 
"{:"  "month"  12  "day"  31  "year"
 1969  "}"  "]";
namedWindow(winname,flags) Create named highgui window
fs  "mystruct"  "{"  "x"  1  "y"  2 
destroyWindow(winname) Destroy the specied window
"width"  100  "height"  200  "lbp"  "[:";
resize()
Resize image
imshow(winname, mtx) Show image in the window
const uchar arr[] = {0, 1, 1, 0, 1, 1, 0, 1};
getRectSubPix()
Extract an image patch
waitKey(delay)
Wait for a key press during the specifs.writeRaw("u", arr, (int)(sizeof(arr)/sizeof(arr[0])));
warpAffine()
Warp image anely
ed time interval (or forever). Process
fs  "]"  "}";
warpPerspective()
Warp image perspectively
events while waiting. Do not forget to
remap()
Generic image warping
call this function several times a second
convertMaps()
Optimize maps for a faster remap() ex- Scalars (integers, oating-point numbers, text strings),
in your code.
matrices,
STL
vectors
of
scalars
and
some
other
types
can
be
ecution
createTrackbar(...) Add trackbar (slider) to the specied
written to the le storages using  operator
window

Example. Decimate image by factor of 2:


setMouseCallback(...) Set the callback on mouse clicks and
Reading
the
data
back
Mat dst; resize(src, dst, Size(), 1./sqrt(2), 1./sqrt(2));
movements in the specied window
// Type of the file is determined from the content
See camshiftdemo.cpp and other OpenCV samples on how to
FileStorage fs("test.yml", FileStorage::READ);
use the GUI functions.
int i1 = (int)fs["i"]; double r1 = (double)fs["r"];
cvtColor()
Convert image from one color space to string str1 = (string)fs["str"];
another
Mat M; fs["mtx"]  M;
threshold(),
Convert grayscale image to binary image FileNode tl = fs["mylist"];
adaptivethreshold() using a xed or a variable threshold
CV_Assert(tl.type() == FileNode::SEQ && tl.size() == 3); calibrateCamera()
Calibrate camera from several views of
floodFill()
Find a connected component using re- double tl0 = (double)tl[0]; string tl1 = (string)tl[1];
a calibration pattern.
gion growing algorithm
int m = (int)tl[2]["month"], d = (int)tl[2]["day"];
findChessboardCorners() Find feature points on the checkerintegral()
Compute integral image
int year = (int)tl[2]["year"];
board calibration pattern.
distanceTransform() build distance map or discrete Voronoi FileNode tm = fs["mystruct"];
solvePnP()
Find the object pose from the known
diagram for a binary image.
Rect r; r.x = (int)tm["x"], r.y = (int)tm["y"];
projections of its feature points.
watershed(),
marker-based image segmentation algo- r.width = (int)tm["width"], r.height = (int)tm["height"]; stereoCalibrate()
Calibrate stereo camera.
grabCut()
rithms. See the samples watershed.cpp int lbp_val = 0;
stereoRectify()
Compute the rectication transforms for
and grabcut.cpp.
FileNodeIterator it = tm["lbp"].begin();
a calibrated stereo camera.
for(int k = 0; k < 8; k++, ++it)
initUndistortRectifyMap() Compute rectication map (for
lbp_val |= ((int)*it)  k;
remap()) for each stereo camera head.
StereoBM, StereoSGBM The stereo correspondence engines to be
calcHist()
Compute image(s) histogram
run on rectied stereo pairs.
calcBackProject()
Back-project the histogram
Scalars are read using the corresponding FileNode's cast
reprojectImageTo3D() Convert disparity map to 3D point
equalizeHist()
Normalize image brightness and conoperators. Matrices and some other types are read using 
cloud.
trast
operator. Lists can be read using FileNodeIterator's.
findHomography()
Find best-t perspective transformation
compareHist()
Compare two histograms
between two 2D point sets.
Writing and reading raster images
To calibrate a camera, you can use calibration.cpp or
Example. Compute Hue-Saturation histogram of an image:
imwrite("myimage.jpg", image);
stereo_calib.cpp samples. To get the disparity maps and the
Mat hsv, H;
Mat image_color_copy = imread("myimage.jpg", 1);
point clouds, use stereo_match.cpp sample.
cvtColor(image, hsv, CV_BGR2HSV);
Mat image_grayscale_copy = imread("myimage.jpg", 0);
int planes[]={0, 1}, hsize[] = {32, 32};
calcHist(&hsv, 1, planes, Mat(), H, 2, hsize, 0);
Compute proximity map for given temThe functions can read/write images in the following formats: matchTemplate
plate.
BMP (.bmp), JPEG (.jpg, .jpeg), TIFF (.tif, .ti),
CascadeClassifier
Viola's Cascade of Boosted classiers usPNG (.png), PBM/PGM/PPM (.p?m), Sun Raster
ing Haar or LBP features. Suits for deSee contours2.cpp and squares.cpp samples on what are the
(.sr), JPEG 2000 (.jp2). Every format supports 8-bit, 1tecting faces, facial features and some
contours and how to use them.
or 3-channel images. Some formats (PNG, JPEG 2000)
other objects without diverse textures.
support 16 bits per channel.
See facedetect.cpp
HOGDescriptor
N. Dalal's object detector using
Reading video from a le or from a camera
XML/YAML storages are collections (possibly nested) of
Histogram-of-Oriented-Gradients
VideoCapture
cap;
scalar values, structures and heterogeneous lists.
(HOG) features.
Suits for detectif(argc > 1) cap.open(string(argv[1])); else cap.open(0);
ing people, cars and other objects
Writing data to YAML (or XML)
Mat frame; namedWindow("video", 1);
with well-dened silhouettes.
See
// Type of the file is determined from the extension
for(;;) {
peopledetect.cpp

Simple GUI (highgui module)

Geometrical Transformations

Various Image Transformations

Camera Calibration, Pose Estimation


and Depth Estimation

Histograms

Object Detection

Contours

Data I/O

You might also like