本节学习了图片的形态转换,即利用函数和图像的前景色和背景色去侵蚀或者扩张图像图形。

import cv2
import numpy as np
from matplotlib import pyplot as plt img = cv2.imread(r'C:\root\learn\python\opencvTest\img\j_point.png')

#定义内核
kernel = np.ones((5,5),np.uint8)
'''
侵蚀图像:侵蚀前景物的边界(尽量使前景物的颜色为白色)
通过kernel滑动通过图像。原始图像中的一个像素只有在内核下所有的像素都是1才被认为时1,否则或被侵蚀(变成0)
''
erosion = cv2.erode(img,kernel, iterations=1)

'''
扩张图像:扩张前景物的边界。与侵蚀相反。如果内核滑动通过图像,只要有一个图像在内核作用下为1,则为1.
'''
dilation = cv2.dilate(img, kernel, iterations=1)
'''
opening先侵蚀在扩张。主要用于去除噪音
'''
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
'''
closing:先扩张再侵蚀:用于消除前景物中的‘小洞’
'''
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
'''
gradient:扩张图与侵蚀图之差。得到对象的轮廓
'''
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
#kernel = np.ones((20,20),np.uint8)

'''
tophat: 原图像与opening之差
'''
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)

'''
blackhat: closing图像与原图像之差
'''
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT,kernel)
plt.subplot(241),plt.imshow(img),plt.title('Original')
plt.xticks([]),plt.yticks([])
plt.subplot(242),plt.imshow(erosion),plt.title('erosion')
plt.xticks([]),plt.yticks([])
plt.subplot(243),plt.imshow(dilation),plt.title('dilation')
plt.xticks([]),plt.yticks([])
plt.subplot(244),plt.imshow(opening),plt.title('opening')
plt.xticks([]),plt.yticks([])
plt.subplot(245),plt.imshow(closing),plt.title('closing')
plt.xticks([]),plt.yticks([])
plt.subplot(246),plt.imshow(gradient),plt.title('gradient')
plt.xticks([]),plt.yticks([])
plt.subplot(247),plt.imshow(tophat),plt.title('tophat')
plt.xticks([]),plt.yticks([])
plt.subplot(248),plt.imshow(blackhat),plt.title('blackhat')
plt.xticks([]),plt.yticks([])
plt.show()

初识OpenCV-Python - 008: 形态转换的更多相关文章

  1. OpenCV Python教程(3、直方图的计算与显示)

    转载请详细注明原作者及出处,谢谢! 本篇文章介绍如何用OpenCV Python来计算直方图,并简略介绍用NumPy和Matplotlib计算和绘制直方图 直方图的背景知识.用途什么的就直接略过去了. ...

  2. OpenCV + python 实现人脸检测(基于照片和视频进行检测)

    OpenCV + python 实现人脸检测(基于照片和视频进行检测) Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征 ...

  3. Erlang/Elixir: 使用 OpenCV, Python 搭建图片缩略图服务器

    这篇文章是在OSX上测试和运行的的, Ubuntu下的安装和配置请移步到这里 应用程序进程树, 默认 Poolboy 中初始化10个用于处理图片的 Python 工作进程(Worker) 首先安装Op ...

  4. 完善GDAL与OpenCV间的数据格式转换与影像分块读写

    本博客为原创内容,未经博主允许禁止转载,商用,谢谢. 一.前言 关于GDAL与openCV间的数据格式转换,在我之前的博客中已有简要说明,这里,由于最近工作上经常用到openCV里的函数进行图像处理, ...

  5. python把汉字转换成拼音实现程序

    python把汉字转换成拼音实现程序 文章一个简洁干的汉字转拼音 程序,复制下载就可以直接使用,有需要的同学可以参考一下下. #coding:utf-8 #基于python2.6 table = 'a ...

  6. Python datatime 格式转换,插入MySQL数据库

    Python datatime 格式转换,插入MySQL数据库 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-11-2 ...

  7. Python中文繁简体转换工具

    Openccpy ___ _____ __ ___ ___ ___ _____ __ __ / __`\/\ '__`\ /'__`\/' _ `\ /'___\ /'___\/\ '__`\/\ \ ...

  8. Python 进制转换 二进制 八进制 十进制 十六进制

    Python 进制转换 二进制 八进制 十进制 十六进制 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/python3-scale.html 全局定义一定不 ...

  9. 使用python制作时间戳转换工具

    使用python制作时间戳转换工具 python 时间戳转日期 日期转时间戳 前言:作为一个程序员一般情况下,json和时间戳是常用的两个工具,我咨询过很多个朋友,他们一般都是通过在线工具对json进 ...

随机推荐

  1. bzoj1031题解

    [解题思路] 将原串复制一份拼接到原串后作为处理串,可以对处理串的前一半后缀排序,即可得出顺序.复杂度O(Llog2L). [参考代码] 也是naive的时候写的..后缀数组居然是用桶排求的.. #p ...

  2. Vue实现一个学生信息录入系统,实现录入和删除

    效果如下: 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  3. LUOGU P3690 【模板】Link Cut Tree (lct)

    传送门 解题思路 \(lct\)就是基于实链剖分,用\(splay\)来维护每一条实链,\(lct\)的维护对象是一棵森林.\(lct\)支持很多神奇的操作: \(1.\) \(access\):这是 ...

  4. Centos7.5安装分布式Hadoop2.6.0+Hbase+Hive(CDH5.14.2离线安装tar包)

    Tags: Hadoop Centos7.5安装分布式Hadoop2.6.0+Hbase+Hive(CDH5.14.2离线安装tar包) Centos7.5安装分布式Hadoop2.6.0+Hbase ...

  5. JS Date Math Number

    Date对象 Date对象和String对象不太一样,定义了一字符串,其实就是一个String对象,就可以直接调用属性和方法. Date对象的使用,必须使用new关键字来创建,否则,无法调用Date对 ...

  6. word 文献标题自动编号

    来自:word中自动编号和多级编号的使用 选中标题或段落,点击鼠标右键,在编号菜单内选择适合的自动编号样式.或者在窗口上方的“开始”选项卡中选择编号样式.如果对已选的编号样式不满意,可以照以上方法直接 ...

  7. 高手总结CSS书写技巧

    这个时候我们就需要针对不同的浏览器去写不同的CSS,让它能够同时兼容不同的浏览器,能在不同的浏览器中也能得到我们想要的页面效果.这个针对不同的浏览器写不同的CSS code的过程,就叫CSS hack ...

  8. Codeforces Round #525 E - Ehab and a component choosing problem

    题目大意: 在一棵树中 选出k个联通块 使得 这k个联通块的点权总和 / k 最大 并且这k个联通块不相互覆盖(即一个点只能属于一个联通块) 如果有多种方案,找到k最大的那种 给定n 有n个点 给定n ...

  9. iOS开发系列-打印内存地址

    打印内存地址 基本数据类型 定义一个基本数据类型,会根据变量类型分配对应的内存空间.比如定义一个int类型的变量a. int a = 10; 内存如下 输入变量a在内存中内存地址 NSLog(@&qu ...

  10. JS对象 返回/设置时间方法 get/setTime() 返回/设置时间,单位毫秒数 一小时为:60*60*1000

    返回/设置时间方法 get/setTime() 返回/设置时间,单位毫秒数,计算从 1970 年 1 月 1 日零时到日期对象所指的日期的毫秒数. 如果将目前日期对象的时间推迟1小时,代码如下: &l ...