OpenCV滤波

作者: LinuxPara | 来源:发表于2017-11-13 18:29 被阅读61次

    图像通道在Android中默认是ARGB,在OpenCV中是BGRA。

    1. RGB转灰度值公式:R*0.299+G*0.587+B*0.114
    2. split函数:分割图像通道
    3. merge函数:合并图像通道
    4. saturate_cast<uchar>(321):在操作图像像素的时候,可能会造成像素溢出,此函数可防止内存溢出。
    5. cvtColor:图像通道转换。

    3种线性滤波

    1. 方框滤波:
    /**
     * 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 )
    
    1. 均值滤波:归一化之后的方框滤波。
    blur( InputArray src, OutputArray dst,
                            Size ksize, Point anchor = Point(-1,-1),
                            int borderType = BORDER_DEFAULT )
    
    1. 高斯滤波:
    /**
     * ksize:正数奇数
     * sigmaX:高斯函数在x方向的偏差
     * sigmaY:高斯函数在y方向的偏差,默认值为0。
     */
    GaussianBlur( InputArray src, OutputArray dst, Size ksize,
                                    double sigmaX, double sigmaY = 0,
                                    int borderType = BORDER_DEFAULT );
    

    2种非线性滤波

    1. 中值滤波:
    /**
     * ksize:大于1的奇数。
     */
    medianBlur( InputArray src, OutputArray dst, int ksize )
    
    1. 双边滤波:
    bilateralFilter( InputArray src, OutputArray dst, int d,
                                       double sigmaColor, double sigmaSpace,
                                       int borderType = BORDER_DEFAULT )
    

    3. 形态学滤波

    最基础的两种形态学操作:
    1. 膨胀:求局部最大值(亮的地方越来越大)。
    /**
     * 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() )
    
    1. 腐蚀:求局部最小值(暗的地方越来越大)。
    /**
     * 参数同上。
     */
    erode( InputArray src, OutputArray dst, InputArray kernel,
                             Point anchor = Point(-1,-1), int iterations = 1,
                             int borderType = BORDER_CONSTANT,
                             const Scalar& borderValue = morphologyDefaultBorderValue() )
    
    形态学操作
    1. 开运算:(先腐蚀后膨胀)消除小物体,纤细点上分离物体。平滑较大物体边缘,操作时不明显改变物体面积。
    2. 闭运算:(先膨胀后腐蚀)消除小型黑洞。
    1. 形态学梯度:(膨胀图-腐蚀图)保留物体的边缘轮廓。
    2. 顶帽:(源图-开运算)做背景提取,(有大背景获取微小物体有规律的时候。)
    3. 黑帽:(闭运算-源图)可以得到轮廓图。
    /**
     * 形态学函数
     * 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() )
    

    相关文章

      网友评论

        本文标题:OpenCV滤波

        本文链接:https://www.haomeiwen.com/subject/supamxtx.html