• cvErode和cvDilate腐蚀和膨胀函数


    Erode腐蚀,Dilate膨胀,这两个形态学函数总是成对出现,前者可以消除较小独点如噪音,后者可以使不连通的图像合并成块。

       void cvErode( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 )

       void cvDilate( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );

       这两个函数的参数相同,是一对“相反”的函数(这里的相反并不是指后一个函数可以将前一个函数处理的图像恢复,而是一个缩小图像团块,一个放大图像的团块)

    void cvErode( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );

    • 1.src
    • 输入图像.
    • 2.dst
    • 输出图像.
    • 3.element
    • 用于腐蚀的结构元素。若为 NULL, 则使用 3×3 长方形的结构元素
    • 4.iterations
    • 腐蚀的次数
    • 腐蚀可以重复进行 (iterations) 次. 对彩色图像,每个彩色通道单独处理。

    void cvDilate( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );

    1.src

    输入图像.

    2.dst

    输出图像.

    3.element

    用于膨胀的结构元素。若为 NULL, 则使用 3×3 长方形的结构元素

    4.iterations

    膨胀的次数

    膨胀可以重复进行 (iterations) 次. 对彩色图像,每个彩色通道单独处理。

    CreateStructuringElementEx:IplConvKernel* cvCreateStructuringElementEx( int cols, int rows, int anchor_x, int anchor_y,

    cvCreateStructuringElementEx

    创建结构元素

    IplConvKernel* cvCreateStructuringElementEx( int cols, int rows, int anchor_x, int anchor_y,

    int shape, int* values=NULL );

    cols

    结构元素的列数目

    rows

    结构元素的行数目

    anchor_x

    锚点的相对水平偏移量

    anchor_y

    锚点的相对垂直偏移量

    shape

    结构元素的形状,可以是下列值:

    CV_SHAPE_RECT, 长方形元素;

    CV_SHAPE_CROSS, 交错元素 a cross-shaped element;

    CV_SHAPE_ELLIPSE, 椭圆元素;

    CV_SHAPE_CUSTOM, 用户自定义元素。这种情况下参数 values 定义了 mask,即象素的那个邻域必须考虑。

    values

    指向结构元素的指针,它是一个平面数组,表示对元素矩阵逐行扫描。(非零点表示该点属于结构元)。如果指针为空,则表示平面数组中的所有元素都是非零的,即结构元是一个长方形(该参数仅仅当shape参数是 CV_SHAPE_CUSTOM 时才予以考虑)。

    函数cv CreateStructuringElementEx 分配和填充结构 IplConvKernel, 它可作为形态操作中的结构元素。

    CreateStructuringElementEx举例

    举个例子比较好说清楚

    比如一个图

    00000

    01110

    00000

    用一个cvCreateStructuringElementEx( 3,1,0 0,CV_SHAPE_RECT)的元素来腐蚀,则结果为

    00000

    01000

    00000

    理解:cvCreateStructuringElementEx( 3,1,0 0,CV_SHAPE_RECT)中的3,1表示要腐蚀的对象是一个3列1行的矩阵,即结构元素为[1(anchor),1,1],如果该矩阵里元素全为非零,则将其转化为同样大小只包含一个非零元素,而该非零元素的位置是(0,0),即锚点位置,效果上讲,可以看做是对图像从y方向上进行截断。同理cvCreateStructuringElementEx( 3,1,1 0,CV_SHAPE_RECT)中的3,1表示要腐蚀的对象是一个3列1行的矩阵。

    假如用下面这个去腐蚀图像,中心是在右下角1 0 01 1 01 1 1 那么应该怎么表示呢?

    理论上应该是int mask[9] = {1, 0, 0, 1, 1, 0, 1, 1, 1}; IplConvKernel* strel = cvCreateStructuringElementEx( 3, 3, 0, 2, CV_SHAPE_CUSTOM, mask );其中0,2可按自己要求设置。

    结构元素的不同设定对于处理结果有着重要影响,当需要对y方向进行腐蚀操作时,同理,可如下操作。

    比如一个图

    01000

    01000

    01000

    而用了一个cvCreateStructuringElementEx( 1,3,1 0,CV_SHAPE_RECT)的元素来腐蚀,则结果为

    00000

    01000

    00000

    此时创建的结构元素为1x3的列矩阵,即[1,1(anchor),1]的转置矩阵,如右图 所示,锚点位置在第二行一列处,即(1,0),具体处理的思路同上所述。图像处理的效果是从x方向上进行了截断,一定程度上剔除该方

  • 相关阅读:
    monkeyrunner1
    也来复习一下数据库的一些知识1
    Monkey原理
    总结一下app客户端的测试点
    从侧计--mongkeyScript问题
    从侧计----monkeyScript实例----开启墨迹天气并添加城市,最后关闭app
    求助:关于sql如何统计时间的问题
    虚拟机无法分配内存 virtual memory exhausted: Cannot allocate memory
    Ubuntu14.04安装libusb
    E: 软件包 ffmpeg 没有可供安装的候选者
  • 原文地址:https://www.cnblogs.com/linchenjian/p/6399493.html
Copyright © 2020-2023  润新知