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)表示。

   

时间: 2024-07-31 14:27:34

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

Opencv3编程入门笔记(6)自我验证各函数程序代码

// asw.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <opencv2/opencv.hpp> using namespace cv; using namespace std; int main() { Mat srcImage = imread("C:/Users/Administrator/Desktop/车牌识别/车牌图像库/1.jpg"); //DrawEllipse(img,(1

OpenCV探索之路(四):膨胀、腐蚀、开闭运算

腐蚀和膨胀是最基本的形态学运算. 腐蚀和膨胀是针对白色部分(高亮部分)而言的. 膨胀就是对图像高亮部分进行"领域扩张",效果图拥有比原图更大的高亮区域:腐蚀是原图中的高亮区域被蚕食,效果图拥有比原图更小的高亮区域. 膨胀 膨胀就是求局部最大值的操作,从图像直观看来,就是将图像光亮部分放大,黑暗部分缩小. #include<opencv2\opencv.hpp> #include<opencv2\highgui\highgui.hpp> using namespa

OpenCV3编程入门_毛星云编著pdf高清版免费下载

下载地址:网盘下载 备用地址:网盘下载 内容提要OpenCV在计算机视觉领域扮演着重要的角色.作为一个基于开源发行的跨平台计算机视觉库,OpenCV实现了图像处理和计算机视觉方面的很多通用算法.<OpenCV3编程入门>以当前最新版本的OpenCV最常用最核心的组件模块为索引,深入浅出地介绍了OpenCV2和OpenCV3中的强大功能.性能,以及新特性.书本配套的OpenCV2和OpenCV3双版本的示例代码包中,含有总计两百多个详细注释的程序源代码与思路说明.读者可以按图索骥,按技术方向进行

OpenCV3编程入门_毛星云编著_电子工业出版下载 &#348453;

下载地址: http://www.gqylpy.com/di/17 <OpenCV3编程入门>毛星云编著PDF高清完整版-下载 内容提要 OpenCV在计算机视觉领域扮演着重要的角色.作为一个基于开源发行的跨平台计算机视觉库,OpenCV实现了图像处理和计算机视觉方面的很多通用算法.<OpenCV3编程入门>以当前最新版本的OpenCV最常用最核心的组件模块为索引,深入浅出地介绍了OpenCV2和OpenCV3中的强大功能.性能,以及新特性.书本配套的OpenCV2和OpenCV3

cvMorphologyEx 形态学操作:开闭运算,形态学梯度,礼帽和黑帽

1.开运算:CV_MOP_OPEN,先腐蚀(cvErode)再膨胀(cvDilate),去除亮点,可以将做了阀值化细胞图像的细胞分开 2.闭运算:CV_MOP_CLOSE,先膨胀(cvDilate)再cvErode,去除暗点 3.形态学梯度:cvDilate-cvErode,用于求边界 4.礼帽:src-开运算,突出亮点 5.黑帽:闭运算-src,突出暗点 程序: 代码: #include "cv.h" #include "cxcore.h" #include &q

腐蚀膨胀,开闭运算,形态学梯度,顶帽,黑帽

膨胀dilate void dilate(InputArray src,OutputArray dst,InputArray kernel,Point anchor=Point(-1,-1),int iterations=1,int borderType=BORDER_CONSTANT,const Scalar&borderValue=morphologyDefaultBorderValue()); 一般第三个参数用getStructuringElement函数配合使用:int g_nStruc

《OpenCV3编程入门》学习笔记三:HighGUI图形用户界面

一:内容介绍 本节主要介绍OpenCV的HighGUI模块,并分享几个例子: 1. 用imwrite函数生成png透明图 2. 综合示例程序:图像的载入.显示与输出 3. 为程序界面添加滑动条 4. 鼠标操作 二:学习笔记 1. 使用OpenCV首先要学会使用它的图形界面,此章节介绍了OpenCV的一些HighGUI使用方法,并不涉及什么理论部分.关于HighGUI大家可参考官网HighGUI模块 http://docs.opencv.org/3.1.0/d7/dfc/group__highgu

OpenCV3编程入门-读书笔记3-滤波

一.领域滤波(卷积) 邻域算子值利用给定像素周围像素的值决定此像素的最终输出.如图左边图像与中间图像卷积得到右边图像.目标图像中绿色的像素由原图像中蓝色标记的像素计算得到. 通用线性邻域滤波是一种常用的邻域算子,输入像素加权得到输出像素: 其中权重核   为"滤波系数".上面的式子可以简记为: 二.线性滤波 1.方框滤波(box Filter) 最简单的线性滤波是移动平均或方框滤波,用 K*K窗口中的像素值平均后输出,核函数为: 其实等价于图像与全部元素值为1的核函数进行卷积再进行尺度

OpenCV3编程入门读书笔记2-core组件

一.颜色空间缩减 1.概念 如果图像是3通道,深度为1个字节,则每个像素有256*256*256种可能值,这么多的可能值会对算法性能造成严重影响.利用颜色空间缩减就能解决这个问题,例如将颜色值0~9取为新值0,10~19取为10,以此类推,这样每个像素有26*26*26种可能值,比上面的可能值要小很多. 2.公式 P_New = ( P_Old / divide ) * divide   (P表示像素值) 3.处理 如果对原图像每个像素都进行上面的公式运算,运算量将非常大.可以将0~255这25