Source code for pycharmers.opencv.morphology

# coding: utf-8
import cv2

from ..utils.generic_utils import handleKeyError, handleTypeError

OPENCV_MORPHOLOGY_OPERATIONS = {
    "opening"  : cv2.MORPH_OPEN,
    "closing"  : cv2.MORPH_CLOSE,
    "gradient" : cv2.MORPH_GRADIENT,
    "tophat"   : cv2.MORPH_TOPHAT,
    "blackhat" : cv2.MORPH_BLACKHAT,
    "hitmiss"  : cv2.MORPH_HITMISS,
}
OPENCV_MORPHOLOGY_KERNEL_SHAPES = {
    "cross"  : cv2.MORPH_CROSS,
    "dilate" : cv2.MORPH_DILATE,
    "erode"  : cv2.MORPH_ERODE,
    "open"   : cv2.MORPH_OPEN,
}

[docs]def morph_kernel_creator(shape="erode", ksize=(5,5)): """Returns a structuring element of the specified size and shape for morphological operations. Args: shape (str, int) : Element shape. ksize (tuple) : Size of the structuring element. Examples: >>> from pycharmers.opencv import morph_kernel_creator >>> kernel = morph_kernel_creator(shape="erode", ksize=(5,5)) >>> kernel.shape (5, 5) >>> kernel = morph_kernel_creator(shape="erode", ksize=(3,5)) >>> kernel.shape >>> (5, 3) """ handleTypeError(types=[str, int], shape=shape) if isinstance(shape, str): handleKeyError(lst=list(OPENCV_MORPHOLOGY_KERNEL_SHAPES.keys()), shape=shape) shape = OPENCV_MORPHOLOGY_KERNEL_SHAPES.get(shape) return cv2.getStructuringElement(shape=shape, ksize=tuple(ksize))
[docs]def morph_transformer_creator(op, kernel=None, shape="erode", ksize=(5,5)): """Returns a function which performs advanced morphological transformations. Args: op (str, int) : Type of a morphological operation kernel (array) : Structuring element. It can be created using ``morph_kernel_creator`` The same can be achieved by giving values in the parameters (``shape``, ``ksize``). shape (str, int) : Element shape. ksize (tuple) : Size of the structuring element. Examples: >>> from pycharmers.opencv import (SAMPLE_LENA_IMG, morph_transformer_creator, hconcat_resize_min, cv2plot, cv2read_mpl) >>> img = cv2read_mpl(SAMPLE_LENA_IMG, 0) >>> transformer = morph_transformer_creator(op="opening", shape="open", ksize=(12,12)) >>> img_opening = transformer(img) >>> ax = cv2plot(hconcat_resize_min(img, img_opening), cmap="gray") """ handleTypeError(types=[str, int], op=op) if isinstance(shape, str): handleKeyError(lst=list(OPENCV_MORPHOLOGY_OPERATIONS.keys()), op=op) op = OPENCV_MORPHOLOGY_OPERATIONS.get(op) if kernel is None: kernel = morph_kernel_creator(shape=shape, ksize=ksize) transformer = lambda src: cv2.morphologyEx(src, op, kernel) return transformer