我的图像中有一些彩色矩形,我通过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
谢谢。
答案 0 :(得分:2)