OpenCV 2.4 Cheat
Sheet (C++)
The OpenCV C++
reference manual is here: http: // docs. opencv. org .
Use Quick Search to find descriptions of the particular functions and classes
1.1. Lớp từ khóa trong thư viện
OpenCV
Key
(từ khóa)
|
Classes (Lớp)
|
Point_
|
Template 2D point class - Lớp điểm ảnh 2D
|
Point3_
|
Template 3D point class - Lớp điểm ảnh 3D
|
Size_
|
Template size (width, height) class - Lớp kích thước ảnh (rộng, cao)
|
Vec
|
Template short vector class
|
Matx
|
Template small matrix class
|
Scalar
|
4-element vector
|
Rect
|
Rectangle
|
Range
|
Integer value range
|
Mat
|
2D or multi-dimensional dense array (can
be used to store matrices, images, histograms, feature descriptors, voxel volumes
etc.)
|
SparseMat
|
Multi-dimensional
sparse array
|
Ptr
|
Template smart pointer class
|
1.2. Cơ bản về ma trận
Function
|
Meaning
|
Mat image(240, 320, CV_8UC3);
|
|
image.create(480,
640, CV_8UC3);
|
|
Mat A33(3, 3, CV_32F, Scalar(5));
Mat B33(3, 3, CV_32F); B33 = Scalar(5);
Mat C33 = Mat::ones(3, 3, CV_32F)*5.;
Mat D33 = Mat::zeros(3, 3, CV_32F) + 5.;
|
|
double a = CV_PI/3;
Mat A22 = (Mat_
float B22data[] = {cos(a), -sin(a), sin(a), cos(a)};
Mat B22 = Mat(2, 2, CV_32F, B22data).clone();
|
|
randu(image,
Scalar(0), Scalar(256)); // uniform dist
randn(image,
Scalar(128), Scalar(10)); // Gaussian dist
|
|
(without copying the data)
Mat image_alias = image;
float* Idata=new float[480*640*3];
Mat I(480, 640, CV_32FC3, Idata);
vector
Mat iP(iptvec); // iP _ 10x1 CV_32SC2 matrix
IplImage* oldC0 =
cvCreateImage(cvSize(320,240),16,1);
Mat newC = cvarrToMat(oldC0);
IplImage oldC1 = newC; CvMat oldC2 = newC;
|
|
(with copying the data)
Mat newC2 = cvarrToMat(oldC0).clone();
vector
|
A33.at(i,j) =
A33.at(j,i)+1;
Mat
dyImage(image.size(), image.type());
for(int y = 1; y
< image.rows-1; y++) {
Vec3b* prevRow =
image.ptr(y-1);
Vec3b* nextRow =
image.ptr(y+1);
for(int x = 0; x < image.cols; x++)
for(int c = 0; c < 3; c++)
dyImage.at(y,x)[c] =
saturate_cast(nextRow[x][c] - prevRow[x][c]);
}
Mat_::iterator it = image.begin(), itEnd
= image.end();
for(; it != itEnd; ++it)
(*it)[1] ^= 255;
1.3. Matrix Manipulations:
Copying, Shuffling, Part Access
Function
|
Meaning
|
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
|
m.reshape(nch,nrows)
|
Change matrix dimensions and/or number of channels without
copying data
|
m.row(i), m.col(i)
|
Take a matrix row/column
|
m.rowRange(Range(i1,i2))
m.colRange(Range(j1,j2))
|
Take a matrix row/column span
|
m.diag(i)
|
Take a matrix diagonal
|
m(Range(i1,i2),Range(j1,j2)), m(roi)
|
Take a submatrix
|
m.repeat(ny,nx)
|
Make a bigger matrix from a smaller one
|
flip(src,dst,dir)
|
Reverse the order of matrix rows and/or columns
|
split(...)
|
Split multi-channel matrix into separate channels
|
merge(...)
|
Make a multi-channel matrix out of the separate channels
|
mixChannels(...)
|
Generalized form of split() and merge()
|
randShuffle(...)
|
Randomly shuffle matrix elements
|
Ví dụ 1. Smooth image ROI in-place
Mat imgroi =
image(Rect(10, 20, 100, 100));
GaussianBlur(imgroi,
imgroi, Size(5, 5), 1.2, 1.2);
Ví dụ 2. Somewhere in a linear algebra algorithm
m.row(i) += m.row(j)*alpha;
Ví dụ 3. Copy image ROI to another image with conversion
Rect r(1, 1, 10, 20);
Mat dstroi = dst(Rect(0,10,r.width,r.height));
src(r).convertTo(dstroi, dstroi.type(), 1, 0);
1.4. Simple Matrix Operations
OpenCV implements most common arithmetical, logical and other
matrix operations, such as
Function
|
Meaning
|
add(), subtract(), multiply(), divide(), absdiff(),
bitwise_and(), bitwise_or(),
itwise_xor(), max(), min(), compare()
|
Correspondingly, addition, subtraction, element-wise
multiplication ... comparison of two matrices or a matrix and a scalar.
|
Ví dụ. 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);
}
Function
|
Meaning
|
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 Ví dụ:
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.
1.5. Image Processsing
1.5.1. Filtering
Function
|
Meaning
|
filter2D()
|
Non-separable linear filter
|
sepFilter2D()
|
Separable linear filter
|
boxFilter(),
|
Smooth the image with one of the linear or non-linear filters
|
GaussianBlur(),medianBlur(),
bilateralFilter()
Sobel(), Scharr()
|
Compute the spatial image derivatives
|
Laplacian()
|
compute Laplacian
|
erode(), dilate()
|
Morphological operations
|
Ví dụ. 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_(3,3)
<-1 -1="" 128="" 9="" o:p="" point="">-1>
1.5.2. Geometrical
Transformations
Function
|
Meaning
|
resize()
|
Resize image
|
getRectSubPix()
|
Extract an image patch
|
warpAffine()
|
Warp image afinely
|
warpPerspective()
|
Warp image perspectively
|
remap()
|
Generic image warping
|
convertMaps()
|
Optimize maps for a faster remap() execution
|
Ví dụ. Decimate image by factor of :
Mat dst; resize(src, dst, Size(), 1./sqrt(2), 1./sqrt(2));
1.5.3. Various Image
Transformations
Function
|
Meaning
|
cvtColor()
|
Convert image from one color space to another
|
threshold(),
adaptivethreshold()
|
Convert grayscale image to binary image using a fixed or a
variable threshold
|
floodFill()
|
Find a connected component using region growing algorithm
|
integral()
|
Compute integral image
|
distanceTransform()
|
build distance map or discrete Voronoi diagram for a binary
image.
|
watershed(),grabCut()
|
marker-based image segmentation algorithms. See the samples
watershed.cpp and grabcut.cpp.
|
1.5.4. Histograms
Function
|
Meaning
|
calcHist()
|
Compute image(s) histogram
|
calcBackProject()
|
Back-project the histogram
|
equalizeHist()
|
Normalize image brightness and contrast
|
compareHist()
|
Compare two histograms
|
Ví dụ. Compute Hue-Saturation histogram of an image:
Mat hsv, H;
cvtColor(image, hsv, CV_BGR2HSV);
int planes[]={0, 1}, hsize[] = {32, 32};
calcHist(&hsv, 1, planes, Mat(), H, 2, hsize, 0);
1.5.5. Contours
See contours2.cpp and squares.cpp samples
on what are the contours and how to use them.
1.6. Data I/O
XML/YAML storages are collections (possibly nested) of scalar values, structures and
heterogeneous lists.
1.6.1. Writing data to YAML (or
XML)
// Type of the file is determined
from the extension
FileStorage fs("test.yml",
FileStorage::WRITE);
fs << "i" << 5 <<
"r" << 3.1 << "str" <<
"ABCDEFGH";
fs
<< "mtx" << Mat::eye(3,3,CV_32F);
fs << "mylist" <<
"[" << CV_PI << "1+1" << "{:" <<
"month" << 12 << "day" << 31 <<
"year" << 1969 << "}" << "]";
fs << "mystruct" <<
"{" << "x" << 1 << "y" <<
2 << "width" << 100 << "height" <<
200 << "lbp" << "[:";
const uchar arr[] = {0, 1, 1, 0, 1, 1,
0, 1};
fs.writeRaw("u", arr,
(int)(sizeof(arr)/sizeof(arr[0])));
fs << "]" <<
"}";
Scalars (integers, floating-point
numbers, text strings), matrices, STL vectors of scalars and some other types
can be written to the file storages using << operator.
1.6.2. Reading the data back
// Type of the file is determined from the content
FileStorage fs("test.yml", FileStorage::READ);
int i1 = (int)fs["i"]; double r1 =
(double)fs["r"];
string str1 = (string)fs["str"];
Mat M; fs["mtx"] >> M;
FileNode tl = fs["mylist"];
CV_Assert(tl.type() == FileNode::SEQ && tl.size() == 3);
double tl0 = (double)tl[0]; string tl1 = (string)tl[1];
int m = (int)tl[2]["month"], d =
(int)tl[2]["day"];
int year = (int)tl[2]["year"];
FileNode tm = fs["mystruct"];
Rect r; r.x = (int)tm["x"], r.y =
(int)tm["y"];
r.width = (int)tm["width"], r.height =
(int)tm["height"];
int lbp_val = 0;
FileNodeIterator it = tm["lbp"].begin();
for(int k = 0; k < 8; k++, ++it)
lbp_val |= ((int)*it) << k;
Scalars are read using the corresponding FileNode's cast operators.
Matrices and some other types are read using operator. Lists can be read using
FileNodeIterator's.
1.6.3. Writing and reading
raster images
imwrite("myimage.jpg", image);
Mat image_color_copy = imread("myimage.jpg", 1);
Mat image_grayscale_copy = imread("myimage.jpg", 0);
The functions can read/write images in the following formats:
BMP (.bmp), JPEG (.jpg, .jpeg), TIFF (.tif, .tiff),
PNG (.png), PBM/PGM/PPM (.p?m), Sun Raster (.sr), JPEG 2000 (.jp2).
Every format supports 8-bit, 1 or 3-channel images. Some formats
(PNG, JPEG 2000) support 16 bits per channel.
1.6.4. Reading video from a file
or from a camera
VideoCapture cap;
if(argc > 1) cap.open(string(argv[1])); else cap.open(0);
Mat frame; namedWindow("video", 1);
for(;;) {
cap >> frame; if(!frame.data) break;
imshow("video", frame); if(waitKey(30) >= 0)
break;
}
1.7. Simple GUI (highgui
module)
Function
|
Meaning
|
namedWindow(winname,flags)
|
Create named highgui window
|
destroyWindow(winname)
|
Destroy the specified window
|
imshow(winname, mtx)
|
Show image in the window
|
waitKey(delay)
|
Wait for a key press during the specified time interval (or forever).
Process events while waiting. Do not forget
to call this function several times a second in your code.
|
createTrackbar(...)
|
Add trackbar (slider) to the specified window
|
setMouseCallback(...)
|
Set the callback on mouse clicks and movements in the specified
window
|
See camshiftdemo.cpp and other OpenCV samples on how to use the GUI functions.
1.8. Camera Calibration, Pose
Estimation and Depth Estimation
Function
|
Meaning
|
calibrateCamera()
|
Calibrate camera from several views of a calibration pattern.
|
findChessboardCorners()
|
Find feature points on the checker board calibration pattern.
|
solvePnP()
|
Find the object pose from the known projections of its feature
points.
|
stereoCalibrate()
|
Calibrate stereo camera.
|
stereoRectify()
|
Compute the rectification transforms for a calibrated stereo
camera.
|
initUndistortRectifyMap()
|
Compute rectification map (for remap()) for each stereo camera
head.
|
StereoBM, StereoSGBM
|
The stereo correspondence engines to be run on rectified stereo
pairs.
|
reprojectImageTo3D()
|
Convert disparity map to 3D point cloud.
|
findHomography()
|
Find best-fit perspective transformation between two 2D point
sets.
|
Không có nhận xét nào:
Đăng nhận xét