Tags: DIP
[TOC]
Opencv Data Types
basic data types
从c++集成过来,包含,int, float, points, rectangles, size...
-
cv::Vec<> fixed vector class 对小型数据比较高效。
常见的是cv::Vec{2,3,4,6}{b,w,s,i,f,d}
-
cv::Matx<> fixed matrix class certain specific small matrix operations。实际上fixed vector是matrix特殊情况,column是1。
常见的是cv::Matx{1,2,3,4,6}{1,2,3,4,6}{f,d}
-
cv::Point 点类,和fixed vector classes区别在于,通过成员变量访问, p.x p.y vector通过index访问。
常见的是cv::Point2i, cv::Point2f, cv::Point2d, cv::Point3i, cv::Point3f, cv::Point3d
-
cv::Scalar 类,本质是有四个元素的vector。继承自cv::Vec<double, 4>,通过下标访问。
cv::Size, 实际上是cv::Size2i, 有width, height两个数据成员(第一个成员是width, 第二个是height)。如果要使用浮点坐标,cv::Size2f。
-
-
cv::Rect, 有height, width, x, y四个成员。注意!Rect的x是横向坐标,y是纵向坐标(从构造器也可以看出)。
cv::RotatedRect,前面的是坐标轴对齐的矩形,这个是非坐标轴对齐的矩形。包含cv::Point2f的中心点,cv::Size2f是大小,float angle成员。
-
cv::complexf, cv::complexd
helper objects
垃圾收集器,切片...
- cv::TermCriteria
程序终止条件 - cv::Range
- cv::Ptr
智能指针,引用计数器。- addref(), release() 增加,减少引用计数器的数目。
- empty(),查看引用指针指向的对象是否存在。
- delete_obj()
- cv::Exception()
- cv::DataType<> template
- cv::InputArray cv::OutputArray cv::InputOutputArray
other utility functions
- cv::alignPtr() 对齐指针
- cv::alignSize()
- cv::allocate() 类似C的对象数组指针
- cv::fastAtan2()
- cvCeil: 比x大的最小整数
- cv::cubeRoot
- cv::CV_Assert() cv::CV_DbgAssert()
- cv::CV_Error() CV_ERROR_)_
- cv:error()
- cv::fastFree()
- cv::fastMalloc()
- cvFloor(): 比x小的最大整数
- cv::format()
- cv::getCPUTickCount()
- cv::getNumThreads()
- cv::getOptimalDFTSize()
- cv::getThreadNum()
- cv::getTickCount()
- cv::getTickFrequency()
- cvIsInf()
- cvIsNaN()
- cvRound()
- cv::setNumThreads()
- cv::setUseOptimized()
-
cv::useOptimized()
large array types
cv::Mat 下一章讲
Dynamic and Variable Storage
cv::Mat constructor
default constructor
- 指定row, column
- 传入 cv::Size
- 多维数组,指定维数和每一维度大小
cv::Mat copy constructor
cv::Mat template constructor
static member functions
accessing array elements
- at<>() 方法
- ptr<>() 方法
- cv::MatIterator<>和cv::MatConstIterator<> 最慢的一种方式
NAryMatIterator()
Accessing Array Elements by Block
Matrix Expression
Saturation Casting
防止数据overflow或者underflow
More Mat operations
cv::SparseMat
accessing sparse array
- cv::SparseMat::ptr()
- cv::SparseMat::ref()
- cv::SparseMat::value()
- cv::SparseMat::find()
- cv::SparseMatItearator_() cv::SparseMatConstIterator_()
functions unique to sparse array
template structure for large array types
可以简化代码:
// 不使用模板函数
cv::Mat m(10, 10, CV_32FC2);
m.at<Vec2f>(i0,i1) = cv::Vec2f(x,y);
// 使用模板
cv::Mat_<Vec2f> m(10,10);
m.at(i0,i1) = cv::Vec2f(x,y);
// or
m(i0,i1) = cv::Vec2f(x,y);
Array Operations
- cv::abs()
cv::MatExpr cv::abs(cv::Inputarray src);
cv::MatExpr cv::abs(const cv::MatExpr& src);
- cv::absdiff()
void cv::absdiff(cv::InputArray src1, cv::InputArray src2, cv::OutputArray dst);
// dst_i = saturate({src1_i - src2_i|)
- cv::add()
void cv::add(cv::InputArray src1, cv::InputArray src2, cv::OutputArray dst, cv::InputArray mask = cv::noArray(), int dtype=-1);
- cv::addWeighted() alpha blending
void cv::addWeighted(cv::InputArray src1, double alpha, cv::InputArray src2, double beta, double gamma, cv::OutputArray dst, int dtype=-1);
- cv::bitwise_and()
- cv::bitwise_not()
- cv::bitwise_or()
- cv::bitwise_xor()
- cv::calcCovarMatrix() 计算n维向量的协方差
void cv::calcCovarMatrix(const cv::Mat* samples, int nsamples, cv::Mat& covar, cv::Mat& mean, int flags, int ctype=cv::F64);
void cv::calcCovarMatirx(cv::InputArray samples, cv::Mat& covar, cv::Mat& mean, int flags, int ctype=cv::F64);
- cv::calcToPolar() 计算两个向量之间的角度和梯度
void cv::cartToPolar(cv::InputArray x, cv::InputArray y, cv::OutputArray magnitude, cv::OutputArray angle, bool angleInDegrees = false);
- cv::checkRange() 检查值范围
bool cv::checkRange(cv::InputArray src, bool quiet=true, cv::Point* pos=0, double minVal=-DBL_MAX, double maxVal=DBL_MAX);
- cv::compare()
bool cv::compare(cv::InputArray src1, cv::InputArray src2, cv::OutputArray dst, int cmpop);
cv::completeSymm()
cv::convertScaleAbs()
void cv::convertScaleAbs(cv::InputArray src, cv::OutputArray dst, doubel alpha=1.0, double beta=0.0);
- cv::countNonZero()
int cv::coutNonZero(cv::InputArray mtx);
- cv::cvarrToMat() 新旧格式转换
cv::Mat cv::cvarrToMat(const CvArr* src, bool copyData=false, bool allowND = true, int coiMode = 0);
- cv::dct()
void cv::dct(cv::InputArray src, cv::OutputArray dst, int flags)
- cv::dft()
void cv::dft(cv::InputArray src, cv::OutputArray dst, int flags=0, int nonzeroRows=0);
- cv::cvtColor() 颜色空间转换,比较常用
void cvtColor(cv::InputArray src, cv::OutputArray dst, int code, int dstCn = 0);
- cv::determinant()
double cv::determinant(cv::InputArray mat);
- cv::divide()
void cv::divide(cv::InputArray src1, cv::InputArray src2, cv::OutputArray dst, double scale=1.0, int dtype=-1);
void cv::divide(double scale, cv::InputArray src2, cv::OutputArray dst, double int dtype=-1);
- cv::eigen()
bool cv::eigen(cv::InputArray src, cv::OutputArray eigenvalues, int lowindex=-1, int high index=-1);
- cv::exp()
void cv::exp(cv::InputArray src, cv::OutputArray dst);
- cv::extractImageCOI()
bool cv::extractImageCOI(const cvArr* arr, cv::OutputArray dst, int coi=-1);
- cv::flip() 图片翻转
void cv::flip(cv::InputArray src, cv::OutArray dst, int flipCode=0);
- cv::gemm() general matrix multiplication ,数据类型是浮点
void cv::gemm(cv::InputArray src1, cv::InputArray src2, double alpha, cv::InputArray src3, double beta, cv::OutputArray dst, int flags=0);
cv::getConvertElem() cv::getConvertScaleElem()
cv::idct()
cv::idft()
cv::inRange() 阈值判断,生成掩码图像
void cv::ingRange(cv::InputArray src, cv::InputArray upperb, cv::InputArray lowerb, cv::OutputArray dst);
cv::insertImageCOI()
cv::invert() 求矩阵逆
double cv::invert(cv::InputArray src, cv::Output Array dst, int method = cv::DECOMP_LU);
void cv::log()
void cv::LUT() 查表变换, 如果lut和src维度一样,输出一维,如果lut是一维,输出和src维度一样。
void cv::LUT(cv::InputArray src, cv::InputArray lut, cv::OutputArray dst);
- cv::magnitude()
void cv::magnitude(cv::InputArray x, cv::InputArray y, cv::OutputArray dst);
- cv::Mahalanobis()
cv::Size cv::mahalanobis(cv::InputArray vec1, cv::InputArray vec2, cv::OutputArray icovar);
cv::max()
cv::mean()
cv::meanStdDev()
cv::merge()
cv::min()
void merge(const vector<cv::Mat>& mv, cv::OutputArray dst);
- cv::minMaxIdx()
void cv::minMaxIdx(cv::InputArray src, double* minVal, double* maxVal, int* minIdx, int* maxIdx, cv::InputArray mask cv::noArray());
void cv::minMaxIdx(const cv::SparseMat& src, double* minVal, double* maxVal, int* minIdx, int* maxIdx);
- cv::minMaxLoc()
void cv::minMaxLoc(cv::InputArray src, double* minVal, double* maxVal, cv::Point* minLoc, cv::Point* maxLoc, cv::InputArray mask = cv::noArray());
void cv::minMaxLoc(const cv::SparseMat& src, double* minVal, double* maxVal, cv::Point* minLoc, cv::Point* maxLoc);
- cv::mixChannels() 更一般的split, merge, cvtColor吧
void cv::mixChannels(const cv::Mat* srcv, int nsrc, cv::Mat* dstv, int ndst, const int* fromTo, size_t, n_pairs);
- cv::mulSpectrums()
double void cv::mulSpectrums(cv::InputArray src1, cv::InputArray arr2, cv::OutputArray dst, int flags, bool conj = false);
- cv::multiply()
void cv::multiply(cv::InputArray src1, cv::InputArray src2, cv::OutputArray dst, double scale=1.0, int dtype = -1);
- cv::mulTransposed(): 计算矩阵和它自己转置的乘积
void cv::mulTransposed(cv::InputArray src1, cv::OutputArray dst, bool aTa, cv::InputArray delta = cv::noArray(), double scale = 1.0, int dtype = -1);
- cv::norm()
double cv::norm(cv::InputArray src1, int normType = cv::NORM_L2, cv::InputArray mask = cv::noArray());
double cv::norm(cv::InputArray src1, cv::InputArray src2, int normType = cv::NORM_L2, cv::InputArray mask=cv::noArray());
double cv::norm(const cv::SparseMat& src, int normType = cv::NORM_L2);
- cv::normalize()
void cv::normalize(cv::InputArray src1, cv::OutputArray dst, double alpha = 1, double beta = 0, int normType = cv::NORM_L2, int dtype=-1, cv::InputArray mask = cv::noArray());
- cv::perspectiveTransorm
cv::perspectiveTransform(cv::InputArray src, cv::OutputArray dst, cv::InputArray mtx);
- cv::polarToCart()
void cv::polarToCart(cv::InputArray magnitude, cv::InputArray angle, cv::OutputArray x, cv::OutputArray y, bool angleInDegrees=false);
- cv::pow()
void cv::pow(cv::InputArray src, double p, cv::OutputArray dst);
- cv::randu() 均匀分布
template<typename _Tp> _Tp randu();
void cv::randu(cv::InputOutArray mtx, cv::InputArray low, cv::InputArray high);
- cv::randn() 正态分布
void cv::randn(cv::InputOutArray mtx, cv::InputArray mean, cv::InputArray stddev);
- cv::randShuffle() 随机重新排列
void cv::randShuffle(cv::InputOutArray mtx, double iterFactor = 1, cv::RNG* rng=NULL);
- cv::reduce()
void cv::reduce(cv::InputArray src, cv::OutputArray vec, int dim, int reduceOp = cv::REDUCE_SUM, int dtype = -1);
- cv::repeat()
void cv::repeat(cv::InputArray src, int nx, int ny, cv::OutputArray dst);
cv::Mat cv::repeat(cv::InputArray src, int nx, int ny);
- cv::scaleAdd()
void cv::scaleAdd(cv::InputArray src1, double scale, cv::InptuArray src2, cv::OutputArray dst);
- cv::setIdentity()
void cv::setIdentity(cv::InputOutputArray dst, const cv::Scalar& value = cv::Scalar(1.0));
- cv::solve()
int cv::solve(cv::InputArray lhs, cv::InputArray rhs, cv::OutputArray dst, int method = cv::DECOMP_LU);
- cv::solveCubic()
int cv::solveCubic(cv::InputArray coeffs, cv::OutputArray roots);
- cv::solvePoly()
int cv::solvePoly(cv::InputArray coeffs, cv::OutputArray roots, int maxIters = 300);
- cv::sort()
void cv::sort(cv::InputArray src, cv::OutputArray dst, int flags);
flags: cv::SORT_EVERY_ROW cv::SORT_EVERY_COLUMN cv::SORT_ASCENDING cv::SORT_DESCENDING
- cv::sortIdx()
void cv::sortIdx(cv::InputArray src, cv::OutputArray dst, int flags);
flags: cv::SORT_EVERY_ROW cv::SORT_EVERY_COLUMN cv::SORT_ASCENDING cv::SORT_DESCENDING
- cv::split()
void cv::split(const cv::Mat& mtx, cv::Mat* mv);
void cv::split(const cv::Mat& mtx, vector<Mat>& mv);
- cv::sqrt()
void cv::sqrt(cv::InputArray src, cv::OutputArray dst);
- cv::subtract()
void cv::subtract(cv::InputArray src1, cv::InputArray src2, cv::OutputArray dst, cv::InputArray mask = cv::noArray(), int dtype = -1);
- cv::sum()
cv::Scalar cv::sum(cv::InputArray arr);
+cv::trace()
cv::Scalar cv::trace(cv::InputArray mat);
- cv::transform()
void cv::transform(cv::InputArray src, cv::OutputArray dst, cv::InputArray mtx);
- cv::transpose()
void cv::transpose(cv::InputArray src, cv::OutputArray dst);
Drawing and Annotating
opencv 画图函数一般都接受三个参数 color, thickness, line type(4,8, LINE_AA)
cv::circle()
void cv::circle(cv::Mat& img, cv::Point center, int raius, const cv::Scalar& color, int thickness = 1, int lineType = 8, int shift = 0);
cv::clipLine() 判断线段是否在矩形内
bool clipLine(cv::Rect imgRect, cv::Point& pt1, cv::Point& pt2);
bool clipLine(cv::Size imgSize, cv::Point& pt1, cv::Point& pt2);
cv::ellipse()
bool ellipse(cv::Mat& img, cv::Point center, cv::Size axes, double angle, double startAngle, double endAngle, const cv::Scalar& color, int thickness=1, int lineType=8, int shift=0);
// 在一个矩形框中画一个椭圆
bool ellipse(cv::Mat& img, const cv::RotatedRect& rect, const cv::Scalar& color, int thickness=1, int lineType=8, int shift=0);
cv::ellipse2Poly() // 椭圆外接多边形
void ellipse2Poly(cv::Point center, cv::Size axes, double angle, double startAngle, double endAngle, int delta, vector<cv::Point>& pts);
cv::fillConvexPoly()
void fillConvexPoly(cv::Mat& img, const cv::Point* pts, int npts, const cv::Scalar& color, int lineType = 8, int shift = 0):
cv::fillPoly() 可以有intersection
void fillPoly(cv::Mat& img, const cv::Point* pts, int npts, int ncontours, const cv::Scalar& color, int lineType=8, int shift=0, cv::Point offset=Point());
cv::line()
void line(cv::Mat& img, cv::Point pt1, cv::Point pt2, const cv::Scalar& color, int thickness=1, int lineType=8, int shift=0);
cv::rectangle()
void rectangle(cv::Mat& img, cv::Point pt1, cv::Point pt2, const cv::Scalar& color, int thickness = 1, int lineType=8, int shift = 0);
void rectangle(cv::Mat& img, cv::Rect r, int thickness=1, const cv::Scalar& color, int lineType=8, int shift=0);
polyLines()
void polyLines(cv::Mat& img, const cv::Point* pts, int npts, int ncontours, bool isClosed, const cv::Scalar& color, int lineType=8, int shift=0);
cv::LineIterator
LineIterator::LineIterator(cv::Mat& img, cv::Point pt1, cv::Point pt2, int lineType = 8, bool leftToRight = false);
cv::putText()
void cv::putText(cv::Mat& img, const string& text, cv::Point origin, int fontFace, doubel fontScale, cv::Scalar color, int thickness=1, int lineType=8, bool bottomLeftOrigin=false);
cv::getTextSIze() 获得合适的输入文字大小
cv::Size cv::getTextSize(const string& text, cv::Point origin, int fontFace, double fontScale, int thickness, int* baseLine);
Functors
PCA
cv::PCA::PCA()
cv::PCA::operator()()
cv::Mat PCA::project(cv::InputArray vec
cv::PCA::backProject()
SVD
cv::SVD()
cv::SVD::operator()()
cv::SVD::compute()
RNG
cv::theRNG() 默认随机数生成器
cv::RNG()
cv::RNG(void)
cv::RNG::RNG(uint64 state)
cv::RNG::operator T() 生成特别类型的随机数
int(rng)
(int)rng
cv::RNG::operator()
unsigned int cv::RNG::operator()();
unsigned int cv::RNG::operator(unsigned int N);
cv::RNG::uniform()
int cv::RNG::uniform(int a, int b); //float, double
cv::RNG::gaussian()
double cv::RNG::gaussian(double sigma);
cv::RNG::fill()
void cv::RNG::fill(InputOutputArray mat, int distType, InputArray a, InputArray b);
Image Video and Data Files
HighGUI library
- hardware part: 相机操作
- filesystem part: 图像/XML/YML读取
- GUI part:
Loading and Saving Images
- load
cv::Mat cv::imread(const string& filename, int flags=cv::IMREAD_COLOR);
write
bool cv::imwrite(const string& filename, cv::InputArray image, const vector<int>& params, = vector<int>());
encode
void cv::imencode(const string& ext, cv::InputArray img, vector<uchar>& buf, const vector<int>& params, = vector<int>());
- decode
cv::Mat cv::imdecode(cv::InputArray buf, int flags = cv::IMREAD_COLOR)
working with video
- read video
cv::videoCapture::VideoCapture(const string& filename);
cv::videoCapture::VideoCapture(int device);
cv::videoCapture::VideoCapture();
- read frames
bool cv::VideoCapture::read(cv::OutputArray image);
cv::VideoCapture& cv::VideoCapture::operator>>(cv::Mat& image);
bool cv::VideoCapture::grab(void);
bool cv::VideoCapture::retrieve(cv::OutputArray image, int channel=0);
double cv::VideoCapture::get(int propid);
bool cv::VideoCapture::set(int propid, doubel value);
- write video
cv::VideoWriter::VideoWriter(const string& filename, int forcc, double fps, cv::Size frame_size, bool is_color = true);
writer.open()
writer.write()
cv::VideoWriter::operator<<()
Data Persistence
Cross-Platform and Native Windows
HighGUI
点击,按键,滑动条
- cv::namedWindow()
int cv::namedWindow(const string& name, int flags=0);
- cv::destroyWindow()
int cv::destroyWindow(const string& name);
cv::imshow()
cv::waitKey()
void cv::moveWindow(const char*name, int x, in y);
void cv::destroyAllWindows(void);
void cv::startWindowThread(void);
mouse events
void your_mouse_callback(int event, int x, int y, int flags, void* param);
- sliders, trackbars, and switches
int cv::createTrackbar(const string& trackbarName, const string& windowName, int* value, int count, cv::TrackbarCallback onChange=NULL, void* param=NULL);
HighGUI with QT-backend
int cv::displayOverlay(const string& name, const string& text, int delay);
int cv::dispplayStatusBar(const string& name, const string& text, int delay);
Filters and Convolution
border extrapolation and boundary conditions
-
cv::copyMakeBorder(): 图像操作的边缘填充
- cv::BORDER_CONSTANT
- cv::BORDER_WRAP
- cv::BORDER_REPLITCATE
- cv::BORDER_REFLECT_101
-
cv::BORDER_DEFAULT = cv::BORDER_REFLECT_101
int cv::borderInterpolate(int p, int len, int borderType); 给定图像中一个点,求出距离该像素点位置偏移像素点的生成像素点, 一般在函数内部使用。
double cv::threshold()阈值化函数
double cv::threshold(
cv::InputArray src,
cv::OutputArray dst,
double thresh,
double maxValue,
int thresholdType
);
- cv::adaptiveThreshold() 自适应阈值化, 只能处理单通道8-bit或者浮点图像,可以用来做图像分布,OCR识别等。
void cv::adaptiveThreshold(
cv::InputArray src,
cv::InputArray dst,
double maxValue,
int adaptiveMethod,
int thresholdType,
int blockSize,
double C
)
- cv::blur() 均值平滑
void cv::blur(
cv::InputArray src,
cv::OutputArray dst,
cv::Size ksize,
cv::Point anchor = cv::Point(-1,-1),
int borderType = cv::BORDER_DEFAULT
)
- cv::boxFilter() 更一般的均值平滑函数,可以指定输出数目,可以使用unmormalized模式(不除以kernel数目)。
- cv::meadianBlur() 中值滤波
void cv::medianBlur(
cv::InputArray src,
cv::InputArray dst,
cv::Size ksize
);
- cv::GaussianBlur() 高斯滤波, opencv针对33,55, 7*7 sigmaX = 0的运算有特殊优化
void cv::GaussianBlur(
cv::InputArray src,
cv::OutputArray dst,
cv::Size ksize,
double sigmaX,
double sigmaY = 0.0,
int borderType = cv::BORDER_DEFAULT
);
如果sigmaX, sigmaY都为0, 那么:
- void cv::bilateralFilter() 双边滤波
void cv::bilateralFilter(
cv::InputArray src,
cv::OutputArray dst,
int d,
double sigmaColor,
double sigmaSpace,
int borderType = cv::BORDER_DEFAULT
);
- cv::Soble() soble 算子
void cv::Soble(
cv::InputArray src,
cv::Output dst,
int ddepth,
int xorder,
int yorder,
cv::Size ksize=3,
doubel scale=1,
double delta=0,
int borderType=cv::BORDER_DEFAULT
);
特别的使用ksize=3的时候,一般都应该设置为cv::SCHARR。
- cv::Laplacian() 拉普拉斯算子
void cv::Laplacian(
cv::InputArray src,
cv::OutputArray dst,
int ddepth,
cv::Size ksize=3,
double scale = 1,
double delta = 0,
int borderType = cv::BORDER_DEFAULT
)
the opencv implementaion of the laplacian operators uses the sobel operators derectly in its computation.
Image Morphology
- cv::dilate() 膨胀
void cv::dilate(
cv::InputArray src,
cv::OutputArray dst,
cv::InputArray element,
cv::Point anchor = cv::Point(-1,-1),
int iterations = 1,
int borderType = cv::BORDER_CONSTANT,
const cv::Scalar& borderValue = cv::morphologyDefaultBorderValue()
);
- cv::erode() 腐蚀
void cv::erode(
cv::InputArray src,
cv::OutputArray dst,
cv::InputArray element,
cv::Point anchor = cv::Point(-1,-1),
int iterations = 1,
int borderType = cv::BORDER_CONSTANT,
const cv::Scalar& borderValue = cv::morphologyDefaultBorderValue()
);
- cv::morphologyEx()可以用来进行多种形态学运算,开,闭,梯度,顶帽,黑帽。
void cv::morphologyEx(
cv::InputArray src,
cv::OutputArray dst,
int op,
cv::InputArray element,
cv::Point anchor,
int iterations = 1,
int borderType = cv::BORDER_DEFAULT,
const cv::Scalar& borderValue = cv::morphologyDefaultBorderValue()
);
- cv::getStructuringElement() 形态学运算kernel形状
cv::Mat cv::getStructuringElement(
int shape,
cv::Size ksize,
cv::Point anchor = cv::Point(-1,-1)
);
- cv::filter2D() 提供kernel 进行一般卷积
cv::filter2D(
cv::InputArray src,
cv::InputArray dst,
int ddepth,
cv::InputArray kernel,
cv::Point anchor = cv::Point(-1,-1),
double delta = 0,
int borderType = cv::BORDER_DEFAULT
);
- cv::sepFilter2D() 可分解kernel的高效卷积函数,提供rowKernel和colKernel
cv::sepFilter2D(
cv::InputArray src,
cv::OutputArray dst,
int ddepth,
cv::InputArray rowKernel,
cv::OutputArray columnKernel,
cv::Point anchor = cv::Point(-1,1),
double delta = 0,
int borderType = cv::BORDER_DEFAULT
);
- cv::getDerivKernel() 构建Sobel或者Scharr核
void cv::getDrivKernels(
cv::OutputArray kx,
cv::OutputArray ky,
int dx,
int dy,
int ksize,
bool normalize = true,
int ktype = CV_32F //type for filter coefficients
);
- cv::getGaussianKernel() 构建高斯kernel
cv::Mat cv::getGaussianKernel(
int ksize,
double sigma,
int ktype = CV_32F
);
General Image Transform
- cv::resize() 图像缩放,主要注意插值的方式
void cv::resize(
cv::InputArray src,
cv::OutputArray dst,
cv::Size dsize,
double fx,
double fy,
int interpolation = cv::INTER_LINEA
- cv::pyrDown() 下采样金字塔,主要注意如何提供dstsize
void cv::pyrDown(
cv::InputArray src,
cv::OutputArray dst,
const cv::Size& dstsize = cv::size()
);
- cv::buildPyramid(): 指定maxlevel金字塔数目构建图像金字塔。
void cv::buildPyramid(
cv::InputArray src,
cv::OutputArrayofArrays dst,
int maxlevel
);
- cv::pyUp(): 上采样金字塔
void cv::pyrUp(
cv::InputArray src,
cv::OutArray dst,
const cv::Size& dstsize = cv::Size()
);
- cv::warpAffine() 仿射变换
void cv::warpAffine(
cv::InputArray src,
cv::OutputArray dst,
cv::InputArray M, // 2 by 3 transform mtx
cv::Size dsize,
int flags = cv::INTER_LINEAR, // interpolation, inverse
int borderMode = cv::BORDER_CONSTANT, // pixel extrapolation
const cv::Scalar& borderValue = cv::Scalar() // for const borders
);
- cv::getAffineTransform() 计算仿射变换矩阵
cv::Mat cv::getAffineTransform(
const cv::Point2f* src,
const cv::Point2f* dst
);
- cv::getRotationMatrix2D() 计算旋转矩阵
cv::Mat cv::getRotationMatrix2D(
cv::Point2f center,
double angle,
double scale
);
rotateMatrix计算公式:
- cv::transform() 针对点的变换,最好使用transform而不是warpAffine()
void cv::transform(
cv::InputArray src,
cv::OutputArray dst,
cv::InputArray mtx
);
- cv::invertAffineTransform(): inverting an affine transformation
void cv::inverseAffineTransform(
cv::InputArray M,
cv::OutputArray iM
);
- cv::warpPerspective() 透视变换
void cv::warpPerspective(
cv::InputArray src,
cv::OutputArray dst,
cv::InputArray M,
cv::Size dsize,
int flags = cv::INTER_LINEAR,
int borderMode = cv::BORDER_CONSTANT,
const cv::Scalar& borderValue = cv::Scalar()
);
- cv::Mat cv::getPerspectiveTransform() 计算透视变换矩阵
cv::Mat cv::getPerspectiveTransform(
const cv::Point2f* src,
const cv::Point2f* dst
);
-
cv::perspectiveTransform()
perspective transform和affine区别:
void cv::perspectiveTransform(
cv::InputArray src,
cv::OutputArray dst,
cv::InputArray mtx
);
dst计算公式
- cv::cartToPolar()
void cv::cartToPolar(
cv::InputArray x,
cv::InputArray y,
cv::OutputArray magnitude,
cv::OutputArray angle,
bool angleInDegrees = false
);
- cv::polarToCart
void cv::polarToCart(
cv::InputArray magnitude,
cv::InputArray angle,
cv::OutputArray x,
cv::OutputArray y,
bool angleInDegrees = false
);
- cv::logPolar() logPolar变换
void cv::logPolar(
cv::InputArray src,
cv::OutArray dst,
cv::Point2f center,
double m,
int flags = cv::INTER_LINEAR | cv::WARP_FILL_OUTLIERS
);
- void cv::remap()
void cv::remap(
cv::InputArray src,
cv::OutputArray dst,
cv::InputArray map1,
cv::InputArray map2,
int interpolation = cv::INTER_LINEAR,
int borderMode = cv::BORDER_CONSTANT,
const cv::Scalar& borderValue = cv::Scalar()
);
- cv::inpaint() 图像修复函数
void cv::inpaint(
cv::InputArray src,
cv::InputArray inpaintMask,
cv::OutputArray dst,
double inpaintRadius,
int flags
);
-
cv:: fastNLMeansDenoising() 只能处理CV::U8图像
相似度对比公式:
void cv::fastNLMeansDenoising(
cv::InputArray src,
cv::OutputArray dst,
float h = 3, // weight decay parameter
int templateWindowSize = 7, //Size of patches used for comparison
int searchWindowSize = 21m, // Maximum patch distance to consider
);
- cv::fastNlMeansDenoisingColored() 彩色图像专用函数
void cv::fastNlMeansDenoisingColored(
cv::InputArray src,
cv::InputArray dst,
float h = 3, // luminosity weight decay parameter
float hColor = 3, // color weight decay parameter
int templateWindowSize = 7,
int searchWindowSize = 21
);
- cv::fastNlMeansDesnoisingMulti()
void cv::fastNlMeansDesnoisingMulti(
cv::InputArrayofArrays srcImgs,
cv::OutputArray dst,
int imgToDenoisingIndex,
int temporalWindowSize, // num images to use
float h = 3,
int templateWindowSize = 7,
int searchWindowSize = 21
);
- void cv::fastNlMeansDenoisingColoredMulti()
void cv::fastNlMeansDenoisingColoredMulti(
cv::InputArrayofArrays srcImgs,
cv::OutputArray dst,
int imgToDenoiseIndex,
int temporalWindowSize,
float h = 3,
float hColor = 3,
int templateWindowSize=7,
int searchWindowSize = 21
);
- cv::equalizeHist() 只能处理单通道图像,对于彩色图像,通常会先转换到LAB空间,然后只在Luminosity通道进行直方图均衡化。
void cv::equalizeHist(
const cv::InputArray src,
cv::OutputArray dst
);