You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
2.2 KiB

2 years ago
# -*- coding: utf-8 -*-
"""
@File : morphologyService.py
@Author: csc
@Date : 2022/7/19
形态学操作
"""
import cv2
import numpy as np
structure = [cv2.MORPH_RECT, cv2.MORPH_CROSS, cv2.MORPH_ELLIPSE]
def erode(imgs, args):
"""
腐蚀: 消除物体边界点使目标缩小可以消除小于结构元素的噪声点
kernelType: int | 结构元类型 0: MORPH_RECT, 1: MORPH_CROSS, 2: MORPH_ELLIPSE
kernelX, kernelY: int, int | (x, y) 结构元大小
"""
kernel = cv2.getStructuringElement(structure[args['kernelType']],
(int(args['kernelX']), int(args['kernelY'])))
res = cv2.erode(imgs[0], kernel)
return res
def dilate(imgs, args):
"""
膨胀: 将与物体接触的所有背景点合并到物体中使目标增大可添补目标中的空洞
kernelType: int | 结构元类型 0: MORPH_RECT, 1: MORPH_CROSS, 2: MORPH_ELLIPSE
kernelSize: Tuple<int, int> | (x, y) 结构元大小
"""
kernel = cv2.getStructuringElement(structure[int(args['kernelType'])],
(int(args['kernelX']), int(args['kernelY'])))
res = cv2.dilate(imgs[0], kernel)
return res
def morphOpen(imgs, args):
"""
开运算: 先腐蚀后膨胀消除图像上细小的噪声并平滑物体边界
kernelType: int | 结构元类型 0: MORPH_RECT, 1: MORPH_CROSS, 2: MORPH_ELLIPSE
kernelSize: Tuple<int, int> | (x, y) 结构元大小
"""
kernel = cv2.getStructuringElement(structure[int(args['kernelType'])],
(int(args['kernelX']), int(args['kernelY'])))
res = cv2.morphologyEx(imgs[0], cv2.MORPH_OPEN, kernel)
return res
def morphClose(imgs, args):
"""
闭运算: 先膨胀后腐蚀填充物体内细小的空洞并平滑物体边界
kernelType: int | 结构元类型 0: MORPH_RECT, 1: MORPH_CROSS, 2: MORPH_ELLIPSE
kernelSize: Tuple<int, int> | (x, y) 结构元大小
"""
kernel = cv2.getStructuringElement(structure[int(args['kernelType'])],
(int(args['kernelX']), int(args['kernelY'])))
res = cv2.morphologyEx(imgs[0], cv2.MORPH_CLOSE, kernel)
return res