fr/fr_env/lib/python3.8/site-packages/imutils/feature/factories.py

124 lines
4.7 KiB
Python

from ..convenience import is_cv2
import cv2
from .dense import DENSE
from .gftt import GFTT
from .harris import HARRIS
from .rootsift import RootSIFT
if is_cv2():
def FeatureDetector_create(method):
method = method.upper()
if method == "DENSE":
return DENSE()
elif method == "GFTT":
return GFTT()
elif method == "HARRIS":
return HARRIS()
return cv2.FeatureDetector_create(method)
def DescriptorExtractor_create(method):
method = method.upper()
if method == "ROOTSIFT":
return RootSIFT()
return cv2.DescriptorExtractor_create(method)
def DescriptorMatcher_create(method):
return cv2.DescriptorMatcher_create(method)
else:
try:
_DETECTOR_FACTORY = {"BRISK": cv2.BRISK_create,
"DENSE": DENSE,
"FAST": cv2.FastFeatureDetector_create,
"GFTT": GFTT,
"HARRIS": HARRIS,
"MSER": cv2.MSER_create,
"ORB": cv2.ORB_create,
"SIFT": cv2.xfeatures2d.SIFT_create,
"SURF": cv2.xfeatures2d.SURF_create,
"STAR": cv2.xfeatures2d.StarDetector_create
}
_EXTRACTOR_FACTORY = {"SIFT": cv2.xfeatures2d.SIFT_create,
"ROOTSIFT": RootSIFT,
"SURF": cv2.xfeatures2d.SURF_create,
"BRIEF": cv2.xfeatures2d.BriefDescriptorExtractor_create,
"ORB": cv2.ORB_create,
"BRISK": cv2.BRISK_create,
"FREAK": cv2.xfeatures2d.FREAK_create
}
_MATCHER_FACTORY = {"BruteForce": cv2.DESCRIPTOR_MATCHER_BRUTEFORCE,
"BruteForce-SL2": cv2.DESCRIPTOR_MATCHER_BRUTEFORCE_SL2,
"BruteForce-L1": cv2.DESCRIPTOR_MATCHER_BRUTEFORCE_L1,
"BruteForce-Hamming": cv2.DESCRIPTOR_MATCHER_BRUTEFORCE_HAMMING,
"FlannBased": cv2.DESCRIPTOR_MATCHER_FLANNBASED
}
except AttributeError:
_DETECTOR_FACTORY = {"MSER": cv2.MSER_create,
"FAST": cv2.FastFeatureDetector_create,
"BRISK": cv2.BRISK_create,
"ORB": cv2.ORB_create,
"GFTT": GFTT,
"HARRIS": HARRIS,
"DENSE": DENSE
}
_EXTRACTOR_FACTORY = {"ORB": cv2.ORB_create,
"BRISK": cv2.BRISK_create
}
_CONTRIB_FUNCS = {"SIFT", "ROOTSIFT", "SURF", "STAR", "BRIEF", "FREAK"}
def FeatureDetector_create(detector, *args, **kw_args):
"""
:param detector: string of the type of keypoint detector to return
:param args: positional arguments for detector
:param kw_args: keyword arguments for detector
:return: the key point detector object
"""
try:
detr = _DETECTOR_FACTORY[detector.upper()]
except KeyError:
if detector.upper() in _CONTRIB_FUNCS:
msg = "OpenCV needs to be compiled with opencv_contrib to support {}".format(detector)
raise AttributeError(msg)
raise AttributeError("{} not a supported detector".format(detector))
return detr(*args, **kw_args)
def DescriptorExtractor_create(extractor, *args, **kw_args):
"""
:param extractor: string of the type of descriptor extractor to return
:param args: positional arguments for extractor
:param kw_args: keyword arguments for extractor
:return: the key extractor object
"""
try:
extr = _EXTRACTOR_FACTORY[extractor.upper()]
except KeyError:
if extractor.upper() in _CONTRIB_FUNCS:
msg = "OpenCV needs to be compiled with opencv_contrib to support {}".format(extractor)
raise AttributeError(msg)
raise AttributeError("{} not a supported extractor".format(extractor))
return extr(*args, **kw_args)
def DescriptorMatcher_create(matcher):
"""
:param matcher: string of the type of descriptor matcher to return
:return: the matcher int
"""
try:
extr = _MATCHER_FACTORY[matcher]
except KeyError:
raise AttributeError("{} not a supported matcher".format(matcher))
return cv2.DescriptorMatcher_create(extr)