opencv学习笔记(五)----图像的形态学操作
图像的形态学操作有基本的腐蚀和膨胀操作和其余扩展形态学变换操作(高级操作)-----开运算,闭运算,礼帽(顶帽)操作,黑帽操作。。。(主要也是为了去噪声,改善图像)
形态学操作都是用于处理二值图像(其实也可以用于彩图,只是结果....)的,1位白,0位黑。。。
主要是基于卷积核的操作,设立一个指定大小的核,然后用这个核的中心点(默认的,可以修改)分别在每个像素点对照一遍,如果有与周围的值不同的改变值(1为0,0为1)就是腐蚀操作,
将周围像素的最大值赋给全部像素为膨胀操作,其他高级操作都是在腐蚀和膨胀的基础之上的操作。。
图像膨胀是图像腐蚀的逆运算
图像腐蚀操作
#图像腐蚀
#dst = cv.erode(src,kernel,iterations) # kennel卷积核 默认为3*3 iterations迭代次数 默认为1
img = cv.imread("E:/pictures/1.jpeg")
kernel = np.ones((5,5),np.uint8) #设置一个5*5的核
erode = cv.erode(img,kernel,iterations=9)
cv.imshow("orginal",img)
cv.imshow("erode",erode)
cv.waitKey()
cv.destroyAllWindows()
图像膨胀:
#图像膨胀
img = cv.imread("E:/pictures/erode.jpg",cv.IMREAD_UNCHANGED)
kernel = np.ones((5,5),np.uint8)
erode = cv.erode(img,kernel,iterations=1)
dilate = cv.dilate(erode,kernel,iterations=1)
cv.imshow("orginal",img)
cv.imshow("erode",erode)
cv.imshow("dilate",dilate)
cv.waitKey()
cv.destroyAllWindows()
开运算:先腐蚀后膨胀,用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。
#开运算 开运算=膨胀(腐蚀(img))
img = cv.imread("E:/pictures/close1.png")
kernel = np.ones((6,6),np.uint8)
morphologyEx = cv.morphologyEx(img,cv.MORPH_OPEN,kernel) #主要是MORPH_OPEN参数
cv.imshow("orginal",img)
cv.imshow("morphologyEx",morphologyEx)
cv.waitKey()
cv.destroyAllWindows()
闭运算:先膨胀后腐蚀,闭运算能够排除小的黑色区域。
#闭运算 开运算=腐蚀(膨胀(img))
img = cv.imread("E:/pictures/close1.png")
kernel = np.ones((7,7),np.uint8)
morphologyEx = cv.morphologyEx(img,cv.MORPH_CLOSE,kernel) #主要是MORPH_CLOSE参数
cv.imshow("orginal",img)
cv.imshow("morphologyEx",morphologyEx)
cv.waitKey()
cv.destroyAllWindows()
梯度运算:膨胀图与腐蚀图之差,通常用来保留边缘轮廓(不是轮廓和边缘识别)
#梯度运算 梯度运算=膨胀-腐蚀
img = cv.imread("E:/pictures/close1.png")
kernel = np.ones((7,7),np.uint8)
morphologyEx = cv.morphologyEx(img,cv.MORPH_GRADIENT,kernel) #主要是MORPH_GRADIENT# 参数
cv.imshow("orginal",img)
cv.imshow("morphologyEx",morphologyEx) #礼帽=原图-开运算 得到噪声
cv.waitKey() #黑帽=闭运算-原图 得到较小的点
cv.destroyAllWindows() #礼帽和黑帽操作都是参数的不同,就不一一上代码了 #MORPH_TOPHAT #MORPH_BLACKHAT
opencv学习笔记(五)----图像的形态学操作的更多相关文章
- 【opencv学习笔记五】一个简单程序:图像读取与显示
今天我们来学习一个最简单的程序,即从文件读取图像并且创建窗口显示该图像. 目录 [imread]图像读取 [namedWindow]创建window窗口 [imshow]图像显示 [imwrite]图 ...
- [OpenCV学习笔记3][图像的加载+修改+显示+保存]
正式进入OpenCV学习了,前面开始的都是一些环境搭建和准备工作,对一些数据结构的认识主要是Mat类的认识: [1.学习目标] 图像的加载:imread() 图像的修改:cvtColor() 图像的显 ...
- opencv学习笔记3——图像缩放,翻转和阈值分割
#图像的缩放操作 #cv.resize(src,dsize,dst=None,,fx=None,fy=None,interpolation=None) #src->原图像,dsize->目 ...
- OpenCV学习笔记(十一) 轮廓操作
在图像中寻找轮廓 首先利用Canny算子检测图像的边缘,再利用Canny算子的输出作为 寻找轮廓函数 findContours 的输入.最后用函数 drawContours 画出轮廓.边界Counto ...
- OpenCV学习笔记:矩阵的掩码操作
矩阵的掩码操作很简单.其思想是:根据掩码矩阵(也称作核)重新计算图像中每个像素的值.掩码矩阵中的值表示近邻像素值(包括该像素自身的值)对新像素值有多大影响.从数学观点看,我们用自己设置的权值,对像素邻 ...
- OpenCV学习笔记(10)——图像梯度
学习图像梯度,图像边界等 梯度简单来说就是求导. OpenCV提供了三种不同的梯度滤波器,或者说高通滤波器:Sobel,Scharr和Lapacian.Sobel,Scharr其实就是求一阶或二阶导. ...
- [OpenCV学习笔记2][Mat数据类型和操作]
[Mat数据类型和基本操作] ®.运行环境:Linux(RedHat+OpenCV3.0) 1.Mat的作用: Mat类用于表示一个多维的单通道或者多通道的稠密数组.能够用来保存实数或复数的向量.矩阵 ...
- OpenCV学习笔记(十) 直方图操作
直方图计算 直方图可以统计的不仅仅是颜色灰度, 它可以统计任何图像特征 (如 梯度, 方向等等).直方图的一些具体细节: dims: 需要统计的特征的数目, 在上例中, dims = 1 因为我们仅仅 ...
- opencv学习笔记(七)---图像金字塔
图像金字塔指的是同一图像不同分辨率的子图的集合,有向下取样金字塔,向上取样金字塔,拉普拉斯金字塔....它是图像多尺度表达的一种,最主要的是用于图像的分割 向下取样金字塔指高分辨率图像向低分辨率图像的 ...
随机推荐
- [原创]JMeter初次使用总结
引言 最近开发 java 后端项目,对外提供Restful API接口,完整功能开发现已完成. 目前通过单测(68%行覆盖率)已保证业务逻辑正确性,同时也尝试使用JMeter进行压力测试以保证并发性能 ...
- ffmpeg转码flv到avi《转》
一个视频转码器,则需要对视频进行解码,然后再对视频进行编码,因而相当于解码器和编码器的结合. 下面图列举了一个视频的转码流程. 输入的视频封装格式是flv 视频编码标准是H.264 音频编码标准是AA ...
- hibernate反向生成奇葩错误
错误场景 最近搞一个hibernate的项目,由于好久不用hibernate了,稍微有点生疏(自从用了ibatis–>mybatis后).这个项目用了hibernate,和ibatis.myba ...
- OSCache-JSP页面缓存(2)
如果在jsp中使用如下标签 <cache:cache key="foobar" scope="session"> some jsp content ...
- centos7 安装erlang rabbitMQ
环境: 虚拟机 centos7 minimal 一.安装Erlang 1.安装依赖 yum install build-essential openssl openssl-devel unixODBC ...
- QT编译时出现警告 Warning: Class Node implements the interface QGraphicsItem but does not list it in Q_INTERFACES. qobject_cast to QGraphicsItem will not work!
1.一定要将public QObject放在public QGraphicsItem的前面,并且在该类的定义中添加Q_OBJECT宏. class XXGraphicsItem : public QO ...
- Glade编程
一.简介 如果有一种软件能将图形界面的设计及时地展现于开发人员的面前,而且在设计完后能直接看到界面的外观效果,这样就使程序员的主要精力集中于应用程序核心功能的开发上,这就是所谓的可视化编程思想. ...
- PHP学习笔记之continue与break
百度中有人这样解释:break是结束整个循环体,continue是结束单个循环体.昨天看燕十八老师PHP视频,讲到break,continue时,举了一个例子,理解更容易.天龙八部中,西夏国公主选婿, ...
- 用js获取cookie
//获取cookiefunction cookie_email(cookie_name){ var cookiestr = document.cookie; if (cookiestr.length ...
- jQuery对象与DOM对象及互相转化
<p id=‘’hello”></p> 普通处理,通过标准JavaScript处理: var p = document.getElementById('hello'); p.i ...