python-opencv图像处理-腐蚀和膨胀

17.python-opencv图像处理-腐蚀和膨胀

第一章 python-opencv-图片导入和显示
第二章 python-opencv图像简单处理
第三章 python-opencv图像mask掩膜处理
第四章 python-opencv图像马赛克
第五章 python-opencv人脸马赛克
第六章 python-opencv人脸检测
第七章 python-opencv图像张贴
第八章 python-opencv轮廓绘制
第九章 python-opencv边缘检测
第十章 python-opencvpython-opencv边缘检测与人脸检测应用
第十一章 python-opencv直方图绘制与直方图均衡
第十二章 python-opencv图像傅里叶变换
第十三章 python-opencv图像的高通滤波和低通滤波
第十四章 python-opencv视频中的人脸检测
第十五章 python-opencv视频人脸检测和保存
第十六章 python-opencv使用摄像头实时人脸检测


文章目录

  • 17.python-opencv图像处理-腐蚀和膨胀
  • 前言
  • 完整代码
  • 部分代码说明
    • 腐蚀
      • 腐蚀原理:
      • 腐蚀代码
      • 腐蚀代码定义
      • 参数说明
    • 膨胀
      • 膨胀原理
      • 膨胀代码
      • 膨胀代码定义
      • 参数说明
  • 结果展示
    • 腐蚀结果
    • 膨胀结果


前言

本篇博客主要介绍如何使用python-opencv对图像进行腐蚀和膨胀图像处理。


完整代码

import numpy as np
import cv2

if __name__ == '__main__':
    
    # 加载图片,并将图片转化为灰度图像
    img = cv2.imread('./tong.jpg',flags=cv2.COLOR_BGR2GRAY)
    
    # 设置腐蚀和膨胀核
    kernel = np.ones(shape=[3,3],dtype=np.uint8)  # 通过shape=[3,3]可以改变处理效果

    # 腐蚀,由多变少,边界容易被腐蚀,去除噪声
    img1 = cv2.erode(img,kernel=kernel)

    # 膨胀,图像变粗
    img2 = cv2.dilate(img1, kernel, iterations=1)

    cv2.imshow('raw',img)  # 显示原图
    cv2.imshow('erode',img1)  # 显示腐蚀图像
    cv2.imshow('dilate2', img2)  # 显示膨胀图像
    cv2.waitKey(0)
    cv2.destroyAllWindows()

部分代码说明

腐蚀

腐蚀原理:

假设原图像中有一个前景物体,那么我们用一个结构元素去腐蚀原图的过程是这样的:遍历原图像的每一个像素,然后用结构元素的中心点对准当前正在遍历的这个像素,然后取当前结构元素所覆盖下的原图对应区域内的所有像素的最小值,用这个最小值替换当前像素值。

腐蚀代码

kernel = np.ones(shape=[3,3],dtype=np.uint8)
img1 = cv2.erode(img,kernel=kernel)  # 腐蚀操作

腐蚀代码定义

erode(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)

参数说明

src:通道数可以是任意的,但深度应该是 CV_8U、CV_16U、CV_16S、CV_32F 或 CV_64F 之一。
. dst: 输出与 src 大小和类型相同的图像。
. kernel: 用于腐蚀的结构元素; 如果 element=Mat(),则使用 3 x 3 矩形结构元素。 可以使用#getStructuringElement 创建内核。
. anchor:锚点在元素中的位置; 默认值 (-1, -1) 表示锚点位于元素中心。
. iterations:应用侵蚀的次数。
. borderType: 像素外推方法。
. borderValue:边界值在恒定边界扩张的情况下,morphologyEx,getStructuringElement

膨胀

膨胀原理

膨胀原理正好与腐蚀原理相反

假设原图像中有一个前景物体,那么我们用一个结构元素去膨胀原图的过程是这样的:遍历原图像的每一个像素,然后用结构元素的中心点对准当前正在遍历的这个像素,然后取当前结构元素所覆盖下的原图对应区域内的所有像素的最大值,用这个最大值替换当前像素值。

膨胀代码

kernel = np.ones(shape=[3,3],dtype=np.uint8)
img2 = cv2.dilate(img1, kernel, iterations=1)

膨胀代码定义

dilate(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)

参数说明

src:通道数可以是任意的,但深度应该是 CV_8U、CV_16U、CV_16S、CV_32F 或 CV_64F 之一。
. dst: 输出与 src 大小和类型相同的图像。
. kernel: 用于腐蚀的结构元素; 如果 element=Mat(),则使用 3 x 3 矩形结构元素。 可以使用#getStructuringElement 创建内核。
. anchor:锚点在元素中的位置; 默认值 (-1, -1) 表示锚点位于元素中心。
. iterations:应用侵蚀的次数。
. borderType: 像素外推方法。
. borderValue:边界值在恒定边界扩张的情况下,morphologyEx,getStructuringElement

结果展示

腐蚀结果

腐蚀后消除了原图中的噪点,但是“3”字体变细。

python-opencv图像处理-腐蚀和膨胀_第1张图片

膨胀结果

膨胀处理后又将“3”字体变为原来大小。

python-opencv图像处理-腐蚀和膨胀_第2张图片

你可能感兴趣的:(python-opencv,opencv,python,图像处理)