该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各类算法,包括图像锐化算子、图像加强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。但愿文章对您有所帮助,若是有不足之处,还请海涵~python
该系列在github全部源代码:https://github.com/eastmountyxz/ImageProcessing-Python
PS:请求帮忙点个Star,哈哈,第一次使用Github,之后会分享更多代码,一块儿加油。git
同时推荐做者的C++图像系列知识:
[数字图像处理] 一.MFC详解显示BMP格式图片
[数字图像处理] 二.MFC单文档分割窗口显示图片
[数字图像处理] 三.MFC实现图像灰度、采样和量化功能详解
[数字图像处理] 四.MFC对话框绘制灰度直方图
[数字图像处理] 五.MFC图像点运算之灰度线性变化、灰度非线性变化、阈值化和均衡化处理详解
[数字图像处理] 六.MFC空间几何变换之图像平移、镜像、旋转、缩放详解
[数字图像处理] 七.MFC图像加强之图像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt锐化详解github
前文参考:
[Python图像处理] 一.图像处理基础知识及OpenCV入门函数
[Python图像处理] 二.OpenCV+Numpy库读取与修改像素
[Python图像处理] 三.获取图像属性、兴趣ROI区域及通道处理
[Python图像处理] 四.图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波
[Python图像处理] 五.图像融合、加法运算及图像类型转换
[Python图像处理] 六.图像缩放、图像旋转、图像翻转与图像平移
[Python图像处理] 七.图像阈值化处理及算法对比web
本篇文章主要讲解Python调用OpenCV实现图像腐蚀和图像膨胀的算法,基础性知识但愿对您有所帮助。
1.基础理论
2.图像腐蚀代码实现
3.图像膨胀代码实现算法
PS:文章参考本身之前系列图像处理文章及OpenCV库函数,同时部分参考网易云视频,推荐你们去学习。同时,本篇文章涉及到《计算机图形学》基础知识,请你们下来补充。数组
PSS:文章参考本身之前系列图像处理文章及OpenCV库函数,同时部分参考网易云lilizong老师的视频,推荐你们去学习。同时,本篇文章涉及到《计算机图形学》基础知识,请你们下来补充。网络
PSS:2019年1~2月做者参加了CSDN2018年博客评选,但愿您能投出宝贵的一票。我是59号,Eastmount,杨秀璋。投票地址:https://bss.csdn.net/m/topic/blog_star2018/indexsvg
(注:该部分参考做者论文《一种改进的Sobel算子及区域择优的身份证智能识别方法》)函数
图像的膨胀(Dilation)和腐蚀(Erosion)是两种基本的形态学运算,主要用来寻找图像中的极大区域和极小区域。其中膨胀相似于“领域扩张”,将图像中的高亮区域或白色部分进行扩张,其运行结果图比原图的高亮区域更大;腐蚀相似于“领域被蚕食”,将图像中的高亮区域或白色部分进行缩减细化,其运行结果图比原图的高亮区域更小。学习
1.图像膨胀
膨胀的运算符是“⊕”,其定义以下:
2.图像腐蚀
腐蚀的运算符是“-”,其定义以下:
1.基础理论
形态学转换主要针对的是二值图像(0或1)。图像腐蚀相似于“领域被蚕食”,将图像中的高亮区域或白色部分进行缩减细化,其运行结果图比原图的高亮区域更小。其主要包括两个输入对象:
(1)二值图像
(2)卷积核
卷积核是腐蚀中的关键数组,采用numpy库能够生成。卷积核的中心点逐个像素扫描原始图像,以下图所示:
2.函数原型
图像腐蚀主要使用的函数为erode,其原型以下:
dst = cv2.erode(src, kernel, iterations)
参数dst表示处理的结果,src表示原图像,kernel表示卷积核,iterations表示迭代次数。下图表示5*5的卷积核,能够采用函数 np.ones((5,5), np.uint8) 构建。
3.代码实现
完整代码以下所示:
#encoding:utf-8 import cv2 import numpy as np #读取图片 src = cv2.imread('test01.jpg', cv2.IMREAD_UNCHANGED) #设置卷积核 kernel = np.ones((5,5), np.uint8) #图像腐蚀处理 erosion = cv2.erode(src, kernel) #显示图像 cv2.imshow("src", src) cv2.imshow("result", erosion) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows()
输出结果以下图所示:
erosion = cv2.erode(src, kernel,iterations=9)
输出结果以下图所示:
1.基础理论
图像膨胀是腐蚀操做的逆操做,相似于“领域扩张”,将图像中的高亮区域或白色部分进行扩张,其运行结果图比原图的高亮区域更大,线条变粗了,主要用于去噪。
(1) 图像被腐蚀后,去除了噪声,可是会压缩图像。
(2) 对腐蚀过的图像,进行膨胀处理,能够去除噪声,而且保持原有形状。
它也包括两个输入对象:
(1)二值图像或原始图像
(2)卷积核
卷积核是腐蚀中的关键数组,采用numpy库能够生成。卷积核的中心点逐个像素扫描原始图像,以下图所示:
被扫描到的原始图像中的像素点,当卷积核对应的元素值只要有一个为1时,其值就为1,不然为0。
2.函数原型
图像膨胀主要使用的函数为dilate,其原型以下:
dst = cv2.dilate(src, kernel, iterations)
参数dst表示处理的结果,src表示原图像,kernel表示卷积核,iterations表示迭代次数。下图表示5*5的卷积核,能够采用函数 np.ones((5,5), np.uint8) 构建。
3.代码实现
完整代码以下所示:
#encoding:utf-8 import cv2 import numpy as np #读取图片 src = cv2.imread('test02.png', cv2.IMREAD_UNCHANGED) #设置卷积核 kernel = np.ones((5,5), np.uint8) #图像膨胀处理 erosion = cv2.dilate(src, kernel) #显示图像 cv2.imshow("src", src) cv2.imshow("result", erosion) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows()
输出结果以下所示:
图像去噪一般须要先腐蚀后膨胀,这又称为开运算,下篇文章将详细介绍。以下图所示:
erosion = cv2.erode(src, kernel)
result = cv2.dilate(erosion, kernel)
但愿文章对你们有所帮助,若是有错误或不足之处,还请海涵。最近经历的事情太多,有喜有悲,关闭了朋友圈,但愿经过不断学习和写文章来忘记烦劳,将忧郁转换为动力。哎,总感受本身在感动这个世界,帮助全部人,而本身却…保重。 (By:Eastmount 2018-10-31 下午4点 https://blog.csdn.net/Eastmount/)