erode函数
2015-08-20 20:56
288 查看
erode函数:
调用形式:
void erode(InputArray src,
OutputArray dst, InputArray kernel,
Point anchor=Point(-1,-1), int iterations=1,
intborderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue() )
参数详解:
跟膨胀操作一样
函数功能:
进行腐蚀操作时,将内核
![](http://www.opencv.org.cn/opencvdoc/2.3.2/html/_images/math/ff5fb3d775862e2123b007eb4373ff6cc1a34d4e.png)
划过图像,将内核
![](http://www.opencv.org.cn/opencvdoc/2.3.2/html/_images/math/ff5fb3d775862e2123b007eb4373ff6cc1a34d4e.png)
覆盖区域的最小相素值提取,并代替锚点位置的相素。
以与膨胀相同的图像作为样本,我们使用腐蚀操作。从下面的结果图我们看到亮区(背景)变细,而黑色区域(字母)则变大了。
kernel:
腐蚀操作的内核。 如果不指定,默认为一个简单的
![](http://www.opencv.org.cn/opencvdoc/2.3.2/html/_images/math/261cc51a4131711f3ea2f16a596b90032c261a7f.png)
矩阵。否则,我们就要明确指定它的形状,可以使用函数getStructuringElement:
我们可以为我们的内核选择三种形状之一:
矩形: MORPH_RECT
交叉形: MORPH_CROSS
椭圆形: MORPH_ELLIPSE
然后,我们还需要指定内核大小,以及 锚点 位置。不指定锚点位置,则默认锚点在内核中心位置。
调用形式:
void erode(InputArray src,
OutputArray dst, InputArray kernel,
Point anchor=Point(-1,-1), int iterations=1,
intborderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue() )
参数详解:
跟膨胀操作一样
函数功能:
进行腐蚀操作时,将内核
![](http://www.opencv.org.cn/opencvdoc/2.3.2/html/_images/math/ff5fb3d775862e2123b007eb4373ff6cc1a34d4e.png)
划过图像,将内核
![](http://www.opencv.org.cn/opencvdoc/2.3.2/html/_images/math/ff5fb3d775862e2123b007eb4373ff6cc1a34d4e.png)
覆盖区域的最小相素值提取,并代替锚点位置的相素。
以与膨胀相同的图像作为样本,我们使用腐蚀操作。从下面的结果图我们看到亮区(背景)变细,而黑色区域(字母)则变大了。
kernel:
腐蚀操作的内核。 如果不指定,默认为一个简单的
![](http://www.opencv.org.cn/opencvdoc/2.3.2/html/_images/math/261cc51a4131711f3ea2f16a596b90032c261a7f.png)
矩阵。否则,我们就要明确指定它的形状,可以使用函数getStructuringElement:
Mat element = getStructuringElement( erosion_type, Size( 2*erosion_size + 1, 2*erosion_size+1 ), Point( erosion_size, erosion_size ) );
我们可以为我们的内核选择三种形状之一:
矩形: MORPH_RECT
交叉形: MORPH_CROSS
椭圆形: MORPH_ELLIPSE
然后,我们还需要指定内核大小,以及 锚点 位置。不指定锚点位置,则默认锚点在内核中心位置。
#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include "highgui.h" #include <stdlib.h> #include <stdio.h> using namespace cv; /// 全局变量 Mat src, erosion_dst, dilation_dst; int erosion_elem = 0; int erosion_size = 0; int dilation_elem = 0; int dilation_size = 0; int const max_elem = 2; int const max_kernel_size = 21; /** Function Headers */ void Erosion( int, void* ); void Dilation( int, void* ); /** @function main */ int main( int argc, char** argv ) { /// Load 图像 src = imread( argv[1] ); if( !src.data ) { return -1; } /// 创建显示窗口 namedWindow( "Erosion Demo", CV_WINDOW_AUTOSIZE ); namedWindow( "Dilation Demo", CV_WINDOW_AUTOSIZE ); cvMoveWindow( "Dilation Demo", src.cols, 0 ); /// 创建腐蚀 Trackbar createTrackbar( "Element:\n 0: Rect \n 1: Cross \n 2: Ellipse", "Erosion Demo", &erosion_elem, max_elem, Erosion ); createTrackbar( "Kernel size:\n 2n +1", "Erosion Demo", &erosion_size, max_kernel_size, Erosion ); /// 创建膨胀 Trackbar createTrackbar( "Element:\n 0: Rect \n 1: Cross \n 2: Ellipse", "Dilation Demo", &dilation_elem, max_elem, Dilation ); createTrackbar( "Kernel size:\n 2n +1", "Dilation Demo", &dilation_size, max_kernel_size, Dilation ); /// Default start Erosion( 0, 0 ); Dilation( 0, 0 ); waitKey(0); return 0; } /** @function Erosion */ void Erosion( int, void* ) { int erosion_type; if( erosion_elem == 0 ){ erosion_type = MORPH_RECT; } else if( erosion_elem == 1 ){ erosion_type = MORPH_CROSS; } else if( erosion_elem == 2) { erosion_type = MORPH_ELLIPSE; } Mat element = getStructuringElement( erosion_type, Size( 2*erosion_size + 1, 2*erosion_size+1 ), Point( erosion_size, erosion_size ) ); /// 腐蚀操作 erode( src, erosion_dst, element ); imshow( "Erosion Demo", erosion_dst ); } /** @function Dilation */ void Dilation( int, void* ) { int dilation_type; if( dilation_elem == 0 ){ dilation_type = MORPH_RECT; } else if( dilation_elem == 1 ){ dilation_type = MORPH_CROSS; } else if( dilation_elem == 2) { dilation_type = MORPH_ELLIPSE; } Mat element = getStructuringElement( dilation_type, Size( 2*dilation_size + 1, 2*dilation_size+1 ), Point( dilation_size, dilation_size ) ); ///膨胀操作 dilate( src, dilation_dst, element ); imshow( "Dilation Demo", dilation_dst ); }
相关文章推荐
- Hive over HBase和Hive over HDFS性能比较分析
- Codeforces Round #270 A~D
- Revit二次开发入门相关安装和配置
- Java- 接口(interface)
- POJ 3159 Candies(差分约束基础题,栈式SPFA)
- choose the best route【最短路dijkstra&&SPFA】
- C
- [shell]常用语句
- 5416 CRB and Tree
- web前端 左右布局demo
- NYOJ 27 水池数目 (DFS)
- C#编程:泛型中接口IEnumerable<T>中GetEnmerator方法的讨论
- C 语言生成工程
- HDU 2685-I won't tell you this is about number theory(gcd(A^m-B^m,A^n-B^n)化简)
- C++,当函数参数或者返回值是对象......(★firecat推荐★)
- zoj2100seeding(DFS)
- event
- 黑马程序员——正则与反射
- HDU 5407 CRB and Candies (2015多校第10场第一题)素数打表,除法取模(乘法逆元)
- poj 3590