3.1.OpenCV技能树--二值图像处理--图像腐蚀与膨胀

文章目录

  • 1.文章内容来源
  • 2.图像膨胀处理
    • 2.1.图像膨胀原理简介
    • 2.2.图像膨胀核心代码
    • 2.3.图像膨胀效果展示
  • 3.图像腐蚀处理
    • 3.1.图像腐蚀原理简介
    • 3.2.图像腐蚀核心代码
    • 3.3.图像腐蚀效果展示
  • 4.易错点总结与反思

1.文章内容来源

1.题目来源:https://edu.csdn.net/skill/practice/opencv-43cb627865154bb69eaad017845e8944/8295?language=opencv&materialId=20783
2.资料来源:https://edu.csdn.net/skill/opencv/opencv-43cb627865154bb69eaad017845e8944?category=658

2.图像膨胀处理

2.1.图像膨胀原理简介

图像膨胀原理:
膨胀过程是有一个结构元素或者模板去在原图像素比对.
当比对过程中,中心像素位置的值根据其八邻域(看取得kernel卷积核的大小)取或运算。
或运算为1就取自己的中心值,否则将周围的最大值去代替中心值,
如下图。由于将周围的最大值去代替中心值,所膨胀的就是白色(高亮部分)

膨胀函数解析:
膨胀函数cv2.dilate(img,kernel,iterations)
1.img:原图像
2.kernel:指膨胀操作的内核,默认3x3的卷积核,也可以自己选择修改。
3.iterations:迭代次数,默认为1.

2.2.图像膨胀核心代码

import cv2
import matplotlib.pyplot as plt
# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
def dilate_example(image):
    #图像灰度化处理
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    #图像阈值化处理
    ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)
    #设定卷积核函数
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
    dst = cv2.dilate(binary, kernel)#图像膨胀处理
    
    figure=[image,gray,binary, dst]
    title=[u'原始图像',u'灰度图像',u'阈值化处理图像',u'膨胀化图像']
    for i in range(4):
        plt.subplot(1,4,i+1)
        plt.imshow(figure[i],'gray')
        plt.title(title[i])
        plt.xticks([])
        plt.yticks([])
    plt.show()

if __name__=='__main__':
    img = cv2.imread(r"D:\HuaweiMoveData\Users\27182\Desktop\opencv\3.Binary image processing\lena.png")
    dilate_example(img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

2.3.图像膨胀效果展示

                3.1.OpenCV技能树--二值图像处理--图像腐蚀与膨胀_第1张图片

3.图像腐蚀处理

3.1.图像腐蚀原理简介

图像腐蚀原理:
腐蚀过程是有一个结构元素或者模板去在原图像素比对.
当比对过程中,中心像素位置的值根据其八邻域(看取得kernel卷积核的大小)取或运算。
或运算为1就取自己的中心值,否则将周围的最大值去代替中心值,
如下图。由于将周围的最大值去代替中心值,所腐蚀的就是白色(高亮部分),高亮部分会变黑.

腐蚀函数解析:
腐蚀函数:cv2.erode(img,kernel,iterations)
1.img:原图像
2.kernel:指腐蚀操作的内核,默认3x3的卷积核,也可以自己选择修改。
3.iterations:迭代次数,默认为1.

3.2.图像腐蚀核心代码

import cv2
import matplotlib.pyplot as plt
# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
def dilate_example(image):
    #图像灰度化处理
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    #图像阈值化处理
    ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)
    #设定卷积核函数
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
    dst = cv2.erode(binary, kernel)#图像腐蚀处理
    
    figure=[image,gray,binary, dst]
    title=[u'原始图像',u'灰度图像',u'阈值化处理图像',u'腐蚀化图像']
    for i in range(4):
        plt.subplot(1,4,i+1)
        plt.imshow(figure[i],'gray')
        plt.title(title[i])
        plt.xticks([])
        plt.yticks([])
    plt.show()

if __name__=='__main__':
    img = cv2.imread(r"D:\HuaweiMoveData\Users\27182\Desktop\opencv\3.Binary image processing\lena.png")
    dilate_example(img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

3.3.图像腐蚀效果展示

                3.1.OpenCV技能树--二值图像处理--图像腐蚀与膨胀_第2张图片

4.易错点总结与反思

易错点反思与总结:
1.膨胀函数:cv2.dilate(img,kernel,iterations),每一个参数就算是默认也要写出来!!
2.腐蚀函数:cv2.erode(img,kernel,iterations),每一个参数就算是默认也要写出来!!
3.腐蚀和膨胀是对白色部分而言的,原先黑色部分的处理没有影响。
4.kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (x, x))可以根据自己意愿设定卷积核。

你可能感兴趣的:(OpenCV技能树,opencv,图像处理,人工智能)