17
形态学转换
形态学操作:
腐蚀
膨胀 开运算 闭运算
常用函数:
cv2.erode()
cv2.dilate()
cv2.morphologyEx()
1
腐蚀
def
erode(src,
#源图像
kernel,
#腐蚀操作的内核
dst=None,
#输出图像
anchor=None,
#内核中心点
iterations=None,
#腐蚀次数
borderType=None,
#推断边缘类型
borderValue=None)#边缘值
2
膨胀
def
dilate(src,
#源图像
kernel,
#腐蚀操作的内核
dst=None,
#输出图像
anchor=None,
#内核中心点
iterations=None,
#腐蚀次数
borderType=None,
#推断边缘类型
borderValue=None)#边缘值
3
开运算
先腐蚀再膨胀
4
闭运算
先膨胀再腐蚀
5
形态学梯度
膨胀与腐蚀的差别
6
礼帽
原始图像与进行开运算进行后的图像的差
7
黑帽
进行闭运算之后得到的图像与原始图像的差
函数原型
def
morphologyEx(src,
#输入图像
op,
#形态学运算类型
kernel,
#内核
dst=None,
#输出图像
anchor=None,
#中心锚点
iterations=None,
#函数迭代次数
borderType=None,
#边界模式
borderValue=None)#常数边界值
结构化元素
print(cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)))
print(cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5)))
print(cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5)))
输出结果如下:
[[1 1 1 1 1]
[1 1 1 1 1]
[1 1 1 1 1]
[1 1 1 1 1]
[1 1 1 1 1]]
[[0 0 1 0 0]
[1 1 1 1 1]
[1 1 1 1 1]
[1 1 1 1 1]
[0 0 1 0 0]]
[[0 0 1 0 0]
[0 0 1 0 0]
[1 1 1 1 1]
[0 0 1 0 0]
[0 0 1 0 0]]
示例代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2016/11/17 14:59
# @Author : Retacn
# @Site :
# @File : imageErode.py
# @Software: PyCharm
import
cv2
import
numpy
as
np
from
matplotlib
import
pyplot
as
plt
img=cv2.imread('../j.png')
kernel=np.ones((5,5),np.uint8)
#腐蚀
dst1=cv2.erode(img,kernel,iterations=1)
#膨胀
dst2=cv2.dilate(img,kernel,iterations=1)
#开运算
dst3=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
#闭运算
dst4=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
#形态梯度学
dst5=cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)
#礼帽
dst6=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
#黑帽
dst7=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)
#正常
plt.subplot(331),plt.imshow(img),plt.title('Normal')
plt.xticks([]),plt.yticks([])
#腐蚀
plt.subplot(332),plt.imshow(dst1),plt.title('Erode')
plt.xticks([]),plt.yticks([])
#膨胀
plt.subplot(333),plt.imshow(dst2),plt.title('Open')
plt.xticks([]),plt.yticks([])
#开运算
plt.subplot(334),plt.imshow(dst3),plt.title('Close')
plt.xticks([]),plt.yticks([])
#闭运算
plt.subplot(335),plt.imshow(dst4),plt.title('Dilate')
plt.xticks([]),plt.yticks([])
#形态学梯度
plt.subplot(336),plt.imshow(dst5),plt.title('Gradient')
plt.xticks([]),plt.yticks([])
#礼帽
plt.subplot(337),plt.imshow(dst6),plt.title('TopHat')
plt.xticks([]),plt.yticks([])
#黑帽
plt.subplot(338),plt.imshow(dst7),plt.title('BlackHat')
plt.xticks([]),plt.yticks([])
#输出结构化元素
print(cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)))
print(cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5)))
print(cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5)))
plt.show()
分享到:
相关推荐
OpenCV-python 学习笔记 OpenCV图像阈值1
1. openCV-python 环境搭建: 2. OpenCV 的图像读取显示及保存 1. 导入图像: 2. 显示图像: 3. 保存图像: 3. OpenCV
2. 平均 3. 高斯模糊 4. 双边滤波 5. 中值模糊
1. 使用摄像头捕获视频 2. 从文件中播放视频 3. 保存视频
1. 扩展缩放 2. 平移 3. 旋转 4. 仿射变换 5. 透视变换
1. 腐蚀 2. 膨胀 3. 开运算 4. 闭运算 5. 形态学梯度 6. 礼帽 7. 黑帽 8. 形态学操作之间关系及结构化元素
1. 转换色彩空间 2. 物体跟踪 3. 寻找跟踪对象的HSV值
lp__Python学习笔记之人脸识别
基于Python和OpenCV的目标跟踪学习笔记
本篇文章主要介绍了详解python OpenCV学习笔记之直方图均衡化,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
https://www.bilibili.com/video/BV1PV411774y?p=47
学习笔记python+opencv利用拉普拉斯算子锐化与sobel算子锐化(csdn)————程序
Opencv现在支持与计算机视觉和机器学习有关的多种算法,并且正在日益扩展。 Opencv支持多种编程语言,例如C++, Python, Java等,并且可以再Windows , Linux , OS X , Android和IOS等不同平台上使用。基于CUDA和...
之前曾经写过一道数米粒的作业,当时用的是c++中的opencv,这次用python试了一下。 原图及效果图 咦?水印怎么去啊 程序流程 程序的大致流程为: 1.读取图片 2.灰度化 3.二值化 4.膨胀、腐蚀等 5.边缘检测 6....
Learning-OpenCV-3-Computer-Vision-with-Python 书本PDF以及代码
主要介绍了OpenCV+python实现实时目标检测功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
大多数应用程序都是用Python编写的,但是,我很快将为所有应用程序添加C ++版本。 应用菜单 应用领域 相关话题 演示版 绿屏色度键控 Alpha混合,模糊 进行中 文件扫描仪 影像透视变换 进行中 淡斑卸妆水 无缝克隆 ...
本文介绍了python OpenCV学习笔记实现二维直方图,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/dd/d0d/tutorial_py_2d_histogram.html 在前一篇文章中,我们计算并绘制了一维的直方图。它被...
学习python_OpenCV的笔记及代码,bilibili上的某个视频的代码,可以借鉴一下,以便节省一部分时间