OpenCV3编程入门笔记(4)腐蚀、膨胀、开闭运算、漫水填充、金字塔、阈值化、霍夫变换

19      腐蚀erode、膨胀dilate

         腐蚀和膨胀是针对图像中的白色部分(高亮部分)而言的,不是黑色的。除了输入输出图像外,还需传入模板算子element,opencv中有三种可以选择:矩形MORPH_RECT,交叉形MORPH_CROSS,椭圆形MORPH_ELLIPSE。Matlab中会有更多一点的模板。

         例如:

         Mat element = getStructuringElement(MORPH_RECT,Size(15,15));

         erode(srcImage,dstImage,element);

         imshow("腐蚀图",dstImage);

         dilate(srcImage,dstImage,element);

         imshow("膨胀图",dstImage);

 

20      开闭运算、形态学梯度、顶帽、黑帽

         开运算是先腐蚀后膨胀的过程,开运算可以用来消除小物体,在纤细点处分离物体,并且在平滑较大物体的边界的同时不明显改变其面积。

         闭运算是先膨胀后腐蚀的过程,能够排除小型黑洞(黑色区域),也就是形成连通域。

         形态学梯度是膨胀图域腐蚀图之差,可以用来保留物体的边缘轮廓。

         顶帽是原图像与开运算的结果图之差,顶帽操作往往用来分离比邻近点亮一点的斑块。在一幅图像具有大幅的背景而微小物品比较有规律的情况下,可以使用顶帽运算进行背景提取。

         黑帽是闭运算结果图与原图像之差,黑帽运算用来分离比邻近点暗一些的斑块。

21      漫水填充

         漫水填充法是一种用特定的颜色填充连通区域,经常被用来标记或者分离图像的一部分进行处理或分析。其实现函数是floodFill。

      Rect ccomp;

         floodFill(srcImage,Point(50,300),Scalar(155,255,55),&ccomp,Scalar(20,20,20),Scalar(20,20,20));

         imshow("漫水填充图",srcImage);

         Point(50,300)是Point类型的,表示漫水填充的起始点;Scalar(155,255,55)表示像素点被染色的值,即在重绘去油像素的新值;&ccomp 是Rect*类型的,有默认值为0,用于设定floodfill函数将要重绘区域的最小边界矩形区域;第五个参数Scalar(20,20,20)表示当前观察像素值与其部件邻域像素值或者待加入该部件的种子像素之间的亮度或颜色之负差的最大值;第六个参数Scalar(20,20,20)表示当前观察像素值与其部件邻域像素值或者待加入该部件的种子像素之间的亮度或颜色之正差的最大值;

22      图像金字塔与图片尺寸缩放

         我们经常会将某种尺寸的图像转换为其他尺寸的图像,如果要放大或缩小图片的尺寸,opencv里有两种方法:

         (1) resize函数 最直接 

      resize(srcImage,dstImage,Size(),0.5,0.5);//缩小为一半

         imshow("缩放1/2图",dstImage);

         resize(srcImage,dstImage,Size(),2,2);//放大2倍

         imshow("放大2倍图",dstImage);

       resize(srcImage,dstImage,Size(srcImage.cols*3,srcImage.rows*3));//放大3倍

         imshow("放大3倍图",dstImage);

         上方所有例子的插值方式都是默认的线性插值LITER_LINEAR,还可选择最近邻插值INTER_NEAREST,区域插值INTER_AREA,三次样条插值INTER_CUBIC,Lanczos插值INTER_LANCZOS4。

 

(2) pyrUp()、pyrDown()函数,即图像金字塔的对图像向上采样和向下采样操作函数。

一般有两种类型的金字塔:1.高斯金字塔,向下采样也就是尺寸缩小,实现函数为pyrUp;2.拉普拉斯金字塔,向上采样,也就是图像尺寸放大,实现函数为pyrDown。

与resize函数实现相似,   pyrUp(srcImage,dstImage,Size(srcImage.cols*2,srcImage.rows*2));// 放大2倍

                       imshow("金字塔放大2倍图",dstImage);

                       pyrDown(srcImage,dstImage,Size(srcImage.cols/2,srcImage.rows/2));// 缩小2倍

                       imshow("金字塔缩小2倍图",dstImage);

23      阈值化

         阈值是最简单的图像分割方法,是基于图像中物体与背景之间的灰度差异,且此分割属于像素级的分割。阈值操作分为固定阈值操作threshold和自适应阈值操作adaptiveThreshold。Ps:threshold函数输入图像可以是8位也可以是32位,即可以是灰度图也可以为彩色图,但adaptiveThreshold输入图像必须是8位,即必须是灰度图。

       Mat imgGray;

         cvtColor(srcImage,dstImage,CV_BGR2GRAY);

         imshow("灰度图.jpg",dstImage);

         imgGray = dstImage;

         //阈值化操作

         threshold(srcImage,dstImage,100,255,3);//表示阈值的具体值,255表示阈值类型的最大值,3表示其阈值方式

         imshow("固定阈值化图像",dstImage);

         adaptiveThreshold(imgGray,dstImage,255,ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY,3,1);//3表示计算阈值大小的一个像素的领域尺寸,取值为3,5,7等。1表示减去平均或加权平均值后的常数值,通常为正数,少数情况下也可以为0或负数。

         imshow("自适应阈值化图像",dstImage);

24      霍夫变换 Hough

         霍夫变换是图像处理中的一种特征提取技术,霍夫变换运用两个坐标空间之间的变换将在一个空间中具有相同形状的曲线或者直线映射到另一个坐标空间的一个点上形成峰值,从而把检测任意形状的问题转化为统计峰值问题。

         霍夫线变换原理采用直线在极坐标表示情况下,由极径和极角(r,theta)表示。

                  

 

 

posted on 2016-07-14 21:34  在某一天老去  阅读(4230)  评论(0编辑  收藏  举报

导航