我在Python 3.X中编程并使用opencv简单blob检测器来检索它们的关键点。这非常好。然而,当谈到大图像时 - 就像很大的图像一样16384x16384像素 - 处理时间非常长。这是代码:
...
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.0
blob_detector = cv2.SimpleBlobDetector_create(blob_params)
key_points = blob_detector.detect(img_morphed)
...
另外发生了几次,在最后一行,在执行过程中,抛出一个断言,指示我:
cv2.error:D:\ Build \ OpenCV \ opencv-3.2.0 \ modules \ core \ src \ matrix.cpp:433:错误:(-215)u!= 0 in function cv :: Mat ::创建
在那里,分配失败。
所以我的问题是: 1)这种图像尺寸是一种边缘情况,检测根本无法在合理的时间内工作吗? 2)错误是否也与图像大小有关? 3)有没有办法事先用额外的步骤改进检测?
谢谢!