图像通道在Android中默认是ARGB,在OpenCV中是BGRA。
- RGB转灰度值公式:R*0.299+G*0.587+B*0.114
- split函数:分割图像通道
- merge函数:合并图像通道
- saturate_cast<uchar>(321):在操作图像像素的时候,可能会造成像素溢出,此函数可防止内存溢出。
- cvtColor:图像通道转换。
3种线性滤波
- 方框滤波:
/**
* src:输入图像
* dst:输出图像
* ddepth:图像深度(存储每个像素的位数,一般情况使用-1)-1表示使用源图的深度。
* ksize:核心矩阵
* anchor:锚点
* normalize:归一化
* borderType:边界模式
*/
boxFilter( InputArray src, OutputArray dst, int ddepth,
Size ksize, Point anchor = Point(-1,-1),
bool normalize = true,
int borderType = BORDER_DEFAULT )
- 均值滤波:归一化之后的方框滤波。
blur( InputArray src, OutputArray dst,
Size ksize, Point anchor = Point(-1,-1),
int borderType = BORDER_DEFAULT )
- 高斯滤波:
/**
* ksize:正数奇数
* sigmaX:高斯函数在x方向的偏差
* sigmaY:高斯函数在y方向的偏差,默认值为0。
*/
GaussianBlur( InputArray src, OutputArray dst, Size ksize,
double sigmaX, double sigmaY = 0,
int borderType = BORDER_DEFAULT );
2种非线性滤波
- 中值滤波:
/**
* ksize:大于1的奇数。
*/
medianBlur( InputArray src, OutputArray dst, int ksize )
- 双边滤波:
bilateralFilter( InputArray src, OutputArray dst, int d,
double sigmaColor, double sigmaSpace,
int borderType = BORDER_DEFAULT )
3. 形态学滤波
最基础的两种形态学操作:
- 膨胀:求局部最大值(亮的地方越来越大)。
/**
* shape:图形 MorphShapes::MORPH_RECT 矩形
* MorphShapes::MORPH_CROSS 交叉形
* MorphShapes::MORPH_ELLIPSE 椭圆形
* ksize:大小
* anchor:锚点
*/
getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1))
/**
* src:源图像
* dst:生成图像
* kernel:核心区域,通过getStructuringElement获取。
* anchor:锚点
* iterations:迭代使用dilate函数的次数。
* borderType:默认
* borderValue:默认
*/
dilate( InputArray src, OutputArray dst, InputArray kernel,
Point anchor = Point(-1,-1), int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue() )
- 腐蚀:求局部最小值(暗的地方越来越大)。
/**
* 参数同上。
*/
erode( InputArray src, OutputArray dst, InputArray kernel,
Point anchor = Point(-1,-1), int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue() )
形态学操作
- 开运算:(先腐蚀后膨胀)消除小物体,纤细点上分离物体。平滑较大物体边缘,操作时不明显改变物体面积。
- 闭运算:(先膨胀后腐蚀)消除小型黑洞。
- 形态学梯度:(膨胀图-腐蚀图)保留物体的边缘轮廓。
- 顶帽:(源图-开运算)做背景提取,(有大背景获取微小物体有规律的时候。)
- 黑帽:(闭运算-源图)可以得到轮廓图。
/**
* 形态学函数
* op:形态类型操作符。MorphTypes::MORPH_OPEN(开运算操作符)
* MORPH_CLOSE(闭运算操作符)
* MORPH_GRADIENT(形态学梯度操作符)
* MORPH_TOPHAT(顶帽操作符)
* MORPH_BLACKHAT(黑帽操作符)
* MORPH_ERODE(腐蚀操作符)
* MORPH_DILATE(膨胀操作符)
* kernel:同1中kernel。
* anchor:锚点
* iterations:迭代运算次数
* borderType:
* borderValue:
*/
morphologyEx( InputArray src, OutputArray dst,
int op, InputArray kernel,
Point anchor = Point(-1,-1), int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue() )
网友评论