Python OpenCV中形态学操作有哪些详细应用案例?

2026-04-30 16:481阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1084个文字,预计阅读时间需要5分钟。

Python OpenCV中形态学操作有哪些详细应用案例?

目录

一、图像与像素

1.1 图像操作

1.2 像素操作

二、运算符

2.1 开运算

2.2 闭运算

三、梯度运算

四、礼帽与黑帽

4.1 礼帽

4.2 黑帽

一、图像与像素

1.1 图像操作:import cv2

目录
  • 一、 腐蚀与膨胀
    • 1.1 腐蚀操作
    • 1.2 膨胀操作
  • 二、 开运算与闭运算
    • 2.1 开运算
    • 2.2 闭运算
  • 三、梯度运算
    • 四、礼帽与黑帽
      • 4.1 礼帽
      • 4.2 黑帽

    一、 腐蚀与膨胀

    1.1 腐蚀操作

    import cv2 import numpy as np img = cv2.imread('DataPreprocessing/img/dige.png') cv2.imshow("img", img) cv2.waitKey(0) cv2.destroyAllWindows()

    dige.png原图1展示(注: 没有原图的可以截图下来保存本地。):

    腐蚀1轮次之后~ (iterations = 1)

    kernel = np.ones((3, 3), np.uint8) erosion = cv2.erode(img, kernel, iterations=1) cv2.imshow('erosion', erosion) cv2.waitKey(0) cv2.destroyAllWindows()

    腐蚀结果展示图2:

    腐蚀圆多次的效果,以及腐蚀原理

    pie = cv2.imread('DataPreprocessing/img/pie.png') cv2.imshow('pie', pie) cv2.waitKey(0) cv2.destroyAllWindows()

    pie.png原图3:

    腐蚀原理, 其中滤波器的大小越大腐蚀的程度越大 图4:

    kernel = np.ones((30, 30), np.uint8) erosion_1 = cv2.erode(pie, kernel, iterations=1) erosion_2 = cv2.erode(pie, kernel, iterations=2) erosion_3 = cv2.erode(pie, kernel, iterations=3) res = np.hstack((erosion_1, erosion_2, erosion_3)) cv2.imshow('res', res) cv2.waitKey(0) cv2.destroyAllWindows()

    圆腐蚀三次结果展示图5:

    1.2 膨胀操作

    kernel = np.ones((3, 3), np.uint8) dige_dilate = erosion dige_dilate = cv2.dilate(erosion, kernel, iterations=1) cv2.imshow('dilate', dige_dilate) cv2.waitKey(0) cv2.destroyAllWindows()

    膨胀之前图2,发现线条变粗,跟原图对比的线条相差无几,但是没了那些长须装的噪音,图6:

    膨胀圆多次的效果,以及膨胀原理与腐蚀相反,有白色点的滤波器则滤波器内数据全变为白色。

    pie = cv2.imread('DataPreprocessing/img/pie.png') kernel = np.ones((30, 30), np.uint8) dilate_1 = cv2.dilate(pie, kernel, iterations=1) dilate_2 = cv2.dilate(pie, kernel, iterations=2) dilate_3 = cv2.dilate(pie, kernel, iterations=3) res = np.hstack((dilate_1, dilate_2, dilate_3)) cv2.imshow('res', res) cv2.waitKey(0) cv2.destroyAllWindows()

    膨胀圆3次的结果展示,图7:

    二、 开运算与闭运算

    2.1 开运算

    # 开:先腐蚀,再膨胀 img = cv2.imread('DataPreprocessing/img/dige.png') kernel = np.ones((5, 5), np.uint8) opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel) cv2.imshow('opening', opening) cv2.waitKey(0) cv2.destroyAllWindows()

    将原图1,先腐蚀,再膨胀,得到开运算结果图8:

    2.2 闭运算

    # 闭:先膨胀,再腐蚀 img = cv2.imread('DataPreprocessing/img/dige.png') kernel = np.ones((5, 5), np.uint8) closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel) cv2.imshow('closing', closing) cv2.waitKey(0) cv2.destroyAllWindows()

    将原图1,先膨胀,再腐蚀,得到开运算结果图9:

    三、梯度运算

    拿原图3的圆,做5次膨胀,5次腐蚀,相减得到其轮廓。

    # 梯度=膨胀-腐蚀 pie = cv2.imread('DataPreprocessing/img/pie.png') kernel = np.ones((7, 7), np.uint8) dilate = cv2.dilate(pie, kernel, iterations=5) erosion = cv2.erode(pie, kernel, iterations=5) res = np.hstack((dilate, erosion)) cv2.imshow('res', res) cv2.waitKey(0) cv2.destroyAllWindows() gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel) cv2.imshow('gradient', gradient) cv2.waitKey(0) cv2.destroyAllWindows()

    得到梯度运算结果图10:

    Python OpenCV中形态学操作有哪些详细应用案例?

    四、礼帽与黑帽

    4.1 礼帽

    礼帽 = 原始输入-开运算结果

    # 礼帽 img = cv2.imread('DataPreprocessing/img/dige.png') tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel) cv2.imshow('tophat', tophat) cv2.waitKey(0) cv2.destroyAllWindows()

    得到礼帽结果图11:

    4.2 黑帽

    黑帽 = 闭运算-原始输入

    # 黑帽 img = cv2.imread('DataPreprocessing/img/dige.png') blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel) cv2.imshow('blackhat ', blackhat) cv2.waitKey(0) cv2.destroyAllWindows()

    得到礼帽结果图12:

    以上就是Python+OpenCV之形态学操作详解的详细内容,更多关于Python OpenCV形态学操作的资料请关注自由互联其它相关文章!

    本文共计1084个文字,预计阅读时间需要5分钟。

    Python OpenCV中形态学操作有哪些详细应用案例?

    目录

    一、图像与像素

    1.1 图像操作

    1.2 像素操作

    二、运算符

    2.1 开运算

    2.2 闭运算

    三、梯度运算

    四、礼帽与黑帽

    4.1 礼帽

    4.2 黑帽

    一、图像与像素

    1.1 图像操作:import cv2

    目录
    • 一、 腐蚀与膨胀
      • 1.1 腐蚀操作
      • 1.2 膨胀操作
    • 二、 开运算与闭运算
      • 2.1 开运算
      • 2.2 闭运算
    • 三、梯度运算
      • 四、礼帽与黑帽
        • 4.1 礼帽
        • 4.2 黑帽

      一、 腐蚀与膨胀

      1.1 腐蚀操作

      import cv2 import numpy as np img = cv2.imread('DataPreprocessing/img/dige.png') cv2.imshow("img", img) cv2.waitKey(0) cv2.destroyAllWindows()

      dige.png原图1展示(注: 没有原图的可以截图下来保存本地。):

      腐蚀1轮次之后~ (iterations = 1)

      kernel = np.ones((3, 3), np.uint8) erosion = cv2.erode(img, kernel, iterations=1) cv2.imshow('erosion', erosion) cv2.waitKey(0) cv2.destroyAllWindows()

      腐蚀结果展示图2:

      腐蚀圆多次的效果,以及腐蚀原理

      pie = cv2.imread('DataPreprocessing/img/pie.png') cv2.imshow('pie', pie) cv2.waitKey(0) cv2.destroyAllWindows()

      pie.png原图3:

      腐蚀原理, 其中滤波器的大小越大腐蚀的程度越大 图4:

      kernel = np.ones((30, 30), np.uint8) erosion_1 = cv2.erode(pie, kernel, iterations=1) erosion_2 = cv2.erode(pie, kernel, iterations=2) erosion_3 = cv2.erode(pie, kernel, iterations=3) res = np.hstack((erosion_1, erosion_2, erosion_3)) cv2.imshow('res', res) cv2.waitKey(0) cv2.destroyAllWindows()

      圆腐蚀三次结果展示图5:

      1.2 膨胀操作

      kernel = np.ones((3, 3), np.uint8) dige_dilate = erosion dige_dilate = cv2.dilate(erosion, kernel, iterations=1) cv2.imshow('dilate', dige_dilate) cv2.waitKey(0) cv2.destroyAllWindows()

      膨胀之前图2,发现线条变粗,跟原图对比的线条相差无几,但是没了那些长须装的噪音,图6:

      膨胀圆多次的效果,以及膨胀原理与腐蚀相反,有白色点的滤波器则滤波器内数据全变为白色。

      pie = cv2.imread('DataPreprocessing/img/pie.png') kernel = np.ones((30, 30), np.uint8) dilate_1 = cv2.dilate(pie, kernel, iterations=1) dilate_2 = cv2.dilate(pie, kernel, iterations=2) dilate_3 = cv2.dilate(pie, kernel, iterations=3) res = np.hstack((dilate_1, dilate_2, dilate_3)) cv2.imshow('res', res) cv2.waitKey(0) cv2.destroyAllWindows()

      膨胀圆3次的结果展示,图7:

      二、 开运算与闭运算

      2.1 开运算

      # 开:先腐蚀,再膨胀 img = cv2.imread('DataPreprocessing/img/dige.png') kernel = np.ones((5, 5), np.uint8) opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel) cv2.imshow('opening', opening) cv2.waitKey(0) cv2.destroyAllWindows()

      将原图1,先腐蚀,再膨胀,得到开运算结果图8:

      2.2 闭运算

      # 闭:先膨胀,再腐蚀 img = cv2.imread('DataPreprocessing/img/dige.png') kernel = np.ones((5, 5), np.uint8) closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel) cv2.imshow('closing', closing) cv2.waitKey(0) cv2.destroyAllWindows()

      将原图1,先膨胀,再腐蚀,得到开运算结果图9:

      三、梯度运算

      拿原图3的圆,做5次膨胀,5次腐蚀,相减得到其轮廓。

      # 梯度=膨胀-腐蚀 pie = cv2.imread('DataPreprocessing/img/pie.png') kernel = np.ones((7, 7), np.uint8) dilate = cv2.dilate(pie, kernel, iterations=5) erosion = cv2.erode(pie, kernel, iterations=5) res = np.hstack((dilate, erosion)) cv2.imshow('res', res) cv2.waitKey(0) cv2.destroyAllWindows() gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel) cv2.imshow('gradient', gradient) cv2.waitKey(0) cv2.destroyAllWindows()

      得到梯度运算结果图10:

      Python OpenCV中形态学操作有哪些详细应用案例?

      四、礼帽与黑帽

      4.1 礼帽

      礼帽 = 原始输入-开运算结果

      # 礼帽 img = cv2.imread('DataPreprocessing/img/dige.png') tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel) cv2.imshow('tophat', tophat) cv2.waitKey(0) cv2.destroyAllWindows()

      得到礼帽结果图11:

      4.2 黑帽

      黑帽 = 闭运算-原始输入

      # 黑帽 img = cv2.imread('DataPreprocessing/img/dige.png') blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel) cv2.imshow('blackhat ', blackhat) cv2.waitKey(0) cv2.destroyAllWindows()

      得到礼帽结果图12:

      以上就是Python+OpenCV之形态学操作详解的详细内容,更多关于Python OpenCV形态学操作的资料请关注自由互联其它相关文章!