【发布时间】:2018-05-30 15:08:39
【问题描述】:
我的图像中有一些彩色矩形,通过 HSV 阈值处理成功识别。结果如下所示:
现在我想将大斑点检测为一个点。我用cv2.SimpleBlobDetector() 和自定义参数试了一下:
import cv2
import numpy as np
mask = cv2.imread('mask.png')
original = cv2.imread('original.png')
params = cv2.SimpleBlobDetector_Params()
# thresholds
params.minThreshold = 10
params.maxThreshold = 200
#params.thresholdStep = 20
# filter by area
params.filterByArea = True
params.minArea = 1
params.maxArea = 10000
# filter by circularity
params.filterByCircularity = False
# filter by convexity
params.filterByConvexity = False
# filter by inertia
params.filterByInertia = False
detector = cv2.SimpleBlobDetector(params)
keypoints = detector.detect(mask)
img_keypoints = cv2.drawKeypoints(original, keypoints, np.array([]), (0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imwrite('keypoints.png', img_keypoints)
我希望红点位于绿点的中心。
我该如何解决这个问题?非常感谢您的帮助。
编辑:我忘了说:因为我已经有一个二进制图像作为输入,真的有必要在cv2.SimpleBlobDetector() 中生成多个二进制图像吗?是否可以将值更改为以下内容:
params.minThreshold = 127
params.maxThreshold = 127
通过生成二进制图像来减少不必要的 CPU 使用?
EDIT2:请注意,我使用的是 OpenCV 2,而不是 3
谢谢。
【问题讨论】: