Python OpenCV 形态学操作(腐蚀膨胀,开运算和闭运算)

阅读更多
Python OpenCV 形态学操作(腐蚀膨胀,开运算和闭运算)


过滤器生成
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))  # 椭圆结构
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3))  # 十字结构
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))  # 矩形结构



腐蚀膨胀开、闭运算
# -*-encoding:utf-8-*-
import pytesseract
from PIL import Image
from PIL import ImageFilter
from PIL import ImageFont
from PIL import ImageDraw
import numpy as np
from PIL import Image

import cv2


def main():
    # img = cv2.imread("test001.jpg") #读取图片
    # cv2.imshow("1",img) #显示图片
    # cv2.waitKey(10000)# 延时10s

    # image = Image.open("test002.png")
    # img = image.convert('1')  # 转化为灰度图

    # img.show()

    img = cv2.imread("test002.png", 0)
    kernel = np.ones((3, 3), np.uint8)  # 全为1的过滤数组
    print(kernel)

    # 腐蚀(去白小点)
    img2 = cv2.erode(img, kernel)  # 腐蚀
    cv2.imshow('canny', img2)
    cv2.waitKey(2000)
    # cv2.waitKey()

    # 膨胀(去黑小点)
    img3 = cv2.dilate(img, kernel)  # 膨胀
    cv2.imshow('canny', img3)
    cv2.waitKey(2000)
    # cv2.waitKey()

    # 先腐蚀后膨胀叫开运算(因为先腐蚀会分开物体,这样容易记住),其作用是:分离物体,消除小区域。
    opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)  # 开运算
    cv2.imshow('canny', opening)
    cv2.waitKey(2000)

    # 闭运算则相反:先膨胀后腐蚀(先膨胀会使白色的部分扩张,以至于消除/"闭合"物体里面的小黑洞,所以叫闭运算)
    closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)  # 闭运算
    cv2.imshow('canny', closing)
    cv2.waitKey(2000)


if __name__ == '__main__':
    main()



形态学梯度
# -*-encoding:utf-8-*-
import pytesseract
from PIL import Image
from PIL import ImageFilter
from PIL import ImageFont
from PIL import ImageDraw
import numpy as np
from PIL import Image

import cv2

def main():
    # img = cv2.imread("test001.jpg") #读取图片
    # cv2.imshow("1",img) #显示图片
    # cv2.waitKey(10000)# 延时10s

    # image = Image.open("test002.png")
    # img = image.convert('1')  # 转化为灰度图

    # img.show()

    img = cv2.imread("test002.png", 0)
    kernel = np.ones((3, 3), np.uint8)  # 全为1的过滤数组
    print(kernel)

    # 形态学梯度:膨胀图减去腐蚀图,dilation - erosion,这样会得到物体的轮廓:
    gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)  # 形态学梯度
    cv2.imshow('canny', gradient)
    cv2.waitKey(2000)


if __name__ == '__main__':
    main()




顶帽黑帽
# -*-encoding:utf-8-*-
import pytesseract
from PIL import Image
from PIL import ImageFilter
from PIL import ImageFont
from PIL import ImageDraw
import numpy as np
from PIL import Image

import cv2


def main():
    # img = cv2.imread("test001.jpg") #读取图片
    # cv2.imshow("1",img) #显示图片
    # cv2.waitKey(10000)# 延时10s

    # image = Image.open("test002.png")
    # img = image.convert('1')  # 转化为灰度图

    # img.show()

    img = cv2.imread("test002.png", 0)
    kernel = np.ones((3, 3), np.uint8)  # 全为1的过滤数组
    print(kernel)

    # 顶帽:原图减去开运算后的图
    tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
    cv2.imshow('canny', tophat)
    cv2.waitKey(2000)

    # 黑帽:闭运算后的图减去原图
    blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
    cv2.imshow('canny', blackhat)
    cv2.waitKey(2000)


if __name__ == '__main__':
    main()


你可能感兴趣的:(Python OpenCV 形态学操作(腐蚀膨胀,开运算和闭运算))