Tags: DIP
[TOC]
Opencv Data Types
basic data types
從c++集成過來固蚤,包含钦购,int, float, points, rectangles, size...
-
cv::Vec<> fixed vector class 對小型數(shù)據(jù)比較高效盖文。
常見的是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區(qū)別在于沟绪,通過成員變量訪問, 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兩個數(shù)據(jù)成員(第一個成員是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
智能指針肿嘲,引用計數(shù)器迹缀。- addref(), release() 增加磷雇,減少引用計數(shù)器的數(shù)目。
- empty(),查看引用指針指向的對象是否存在票腰。
- delete_obj()
- cv::Exception()
- cv::DataType<> template
- cv::InputArray cv::OutputArray cv::InputOutputArray
other utility functions
- cv::alignPtr() 對齊指針
- cv::alignSize()
- cv::allocate() 類似C的對象數(shù)組指針
- cv::fastAtan2()
- cvCeil: 比x大的最小整數(shù)
- cv::cubeRoot
- cv::CV_Assert() cv::CV_DbgAssert()
- cv::CV_Error() CV_ERROR_)_
- cv:error()
- cv::fastFree()
- cv::fastMalloc()
- cvFloor(): 比x小的最大整數(shù)
- 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
- 多維數(shù)組匣屡,指定維數(shù)和每一維度大小
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
防止數(shù)據(jù)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
可以簡化代碼:
// 不使用模板函數(shù)
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維向量的協(xié)方差
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 ,數(shù)據(jù)類型是浮點
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() 正態(tài)分布
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 畫圖函數(shù)一般都接受三個參數(shù) 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() 判斷線段是否在矩形內(nèi)
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() 默認隨機數(shù)生成器
cv::RNG()
cv::RNG(void)
cv::RNG::RNG(uint64 state)
cv::RNG::operator T() 生成特別類型的隨機數(shù)
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); 給定圖像中一個點嘱朽,求出距離該像素點位置偏移像素點的生成像素點旭贬, 一般在函數(shù)內(nèi)部使用怔接。
double cv::threshold()閾值化函數(shù)
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() 更一般的均值平滑函數(shù)岸军,可以指定輸出數(shù)目,可以使用unmormalized模式(不除以kernel數(shù)目)瓦侮。
- cv::meadianBlur() 中值濾波
void cv::medianBlur(
cv::InputArray src,
cv::InputArray dst,
cv::Size ksize
);
- cv::GaussianBlur() 高斯濾波, opencv針對33,55, 7*7 sigmaX = 0的運算有特殊優(yōu)化
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()可以用來進行多種形態(tài)學運算肚吏,開方妖,閉,梯度罚攀,頂帽党觅,黑帽雌澄。
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() 形態(tài)學運算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的高效卷積函數(shù),提供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金字塔數(shù)目構建圖像金字塔。
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區(qū)別:
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() 圖像修復函數(shù)
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() 彩色圖像專用函數(shù)
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
);