Source code for draugr.opencv_utilities.color_space.edge

from enum import Enum

import cv2
from sorcery import assigned_names

from draugr.opencv_utilities.namespaces.enums import MorphShapeEnum, MorphTypeEnum
from warg import next_odd

__all__ = ["to_edge", "ToEdgeMethodEnum", "CannyApertureSize"]


[docs]class ToEdgeMethodEnum(Enum): canny, laplacian, sobel_vh, sobel_h, sobel_v, morph_gradient = assigned_names()
[docs]class CannyApertureSize(Enum): a3, a5, a7 = 3, 5, 7
[docs]def to_edge(img, method: ToEdgeMethodEnum = ToEdgeMethodEnum.canny, **kwargs): """ :param img: :type img: :param method: :type method: :param kwargs: :type kwargs: :return: :rtype: """ method = ToEdgeMethodEnum(method) if method == ToEdgeMethodEnum.canny: return cv2.Canny( img, threshold1=kwargs.get("threshold1", 60), threshold2=kwargs.get("threshold2", 180), apertureSize=kwargs.get("apertureSize", CannyApertureSize.a3).value, L2gradient=kwargs.get("L2gradient", None), ) ksize = kwargs.get("ksize", max(next_odd(max(*(img.shape)) // 100), 5)) if method == ToEdgeMethodEnum.morph_gradient: return cv2.morphologyEx( img, MorphTypeEnum.gradient.value, cv2.getStructuringElement(MorphShapeEnum.rect.value, ksize=(ksize, ksize)), ) elif method == ToEdgeMethodEnum.laplacian: return cv2.Laplacian( img, cv2.CV_8UC1, ksize=ksize ) # ,cv2.CV_16UC1, #cv2.CV_16S, # cv2.CV_64F elif method == ToEdgeMethodEnum.sobel_h: return cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=ksize) elif method == ToEdgeMethodEnum.sobel_v: return cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=ksize) elif method == ToEdgeMethodEnum.sobel_vh: sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=ksize) sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=ksize) return sobelx + sobely raise NotImplementedError
if __name__ == "__main__": def aushd(): """description""" import numpy from draugr.opencv_utilities import show_image a = numpy.zeros((50, 50)) a[:, 25] = 1 a[25, :] = 1 show_image(to_edge(a, ToEdgeMethodEnum.sobel_vh), wait=True) aushd()