Hi!
I use the simple blob detector to retreive their key points. This works very good. However when it comes to big images - like really big e.g. 16384x16384 pixels - processing takes really long. Here is the code:
...
if blur_sigma > 0:
img_blurred = cv2.GaussianBlur(img, (-1, -1), blur_sigma)
else:
img_blurred = img
img_hsv = cv2.cvtColor(img_blurred, cv2.COLOR_BGR2HSV)
img_filtered = cv2.inRange(img_hsv, tuple(lower_bounds), tuple(upper_bounds))
ksize = 2 * morph_size + 1
morph_element = cv2.getStructuringElement(morph_element, (ksize, ksize))
img_morphed = cv2.morphologyEx(img_filtered,
morph_operator,
morph_element,
borderType=cv2.BORDER_REFLECT)
blob_params = cv2.SimpleBlobDetector_Params()
blob_params.filterByInertia = False
blob_params.minConvexity = 0.75
blob_params.minConvexity = 0.0
blob_detector = cv2.SimpleBlobDetector_create(blob_params)
key_points = blob_detector.detect(img_morphed)
...
Additionally happened several times that in the last line, during execution, an assertion is thrown which directed me there:
cv2.error: D:\Build\OpenCV\opencv-3.2.0\modules\core\src\matrix.cpp:433: error: (-215) u != 0 in function cv::Mat::create
In there, an allocation fails.
So my questions are: 1) Is this kind of image size and edge case where the detection simply can no longer work with reasonable time? 2) Is the error also related to the image size? 3)Is there a way to improve detection with additonal steps beforehand?
Thanks!