【发布时间】:2015-08-28 16:59:59
【问题描述】:
我遵循了一个 blob 检测示例(使用 cv2.SimpleBlobDetector)并成功检测到二进制图像中的 blob。但是我不知道如何提取关键点的坐标和面积。以下是斑点检测的代码:
# I skipped the parameter setting part.
blobParams = cv2.SimpleBlobDetector_Params()
blobVer = (cv2.__version__).split('.')
if int(blobVer[0]) < 3:
detector = cv2.SimpleBlobDetector(blobParams)
else:
detector = cv2.SimpleBlobDetector_create(blobParams)
# Detect Blobs
keypoints_black = detector.detect(255-black_blob)
trans_blobs = cv2.drawKeypoints(gray_video_crop, \
keypoints_white, np.array([]), (0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
所以变量keypoints_black 包含了blob 的信息。当我打印变量时,它看起来像这样(发现 2 个 blob):
KeyPoint 0x10b10b870, KeyPoint 0x10b1301b0
那么我如何获得关键点的质心坐标及其面积,以便我可以将它们作为 osc 消息发送以进行交互。
【问题讨论】:
-
尝试打印
dir(keypoint)wherekeypoint is obviously a keypoint :) That should give you a list of methods. Also, you can trytuple(keypoint)` 看看它是否可以转换。 -
我试过 tuple(keypoint) 它返回相同,只是在元组而不是数组中。
-
而且 dir(keypoint) 确实返回了许多方法: ['delattr', 'delitem', 'doc', 'eq', '格式', 'ge', 'getattribute', # 'getitem'、'getslice'、'gt'、'hash'、'iadd', 'imul', #'init', 'iter', 'le', 'len', 'lt', 'mul', 'ne', #'new ', 'reduce', 'reduce_ex', 'repr', 'reversed', 'rmul', #'setattr', 'setitem', 'setslice', 'sizeof ', 'str', 'subclasshook', #'append', 'count', 'extend', 'index', 'insert', '弹出','删除','反向',]。但不知道接下来会发生什么
-
虽然 Joao 提供了答案,但我对元组的建议当然是在 keypoint 上,而不是在对象列表上......
标签: python opencv image-processing blob keypoint