我正在尝试使用对象检测识别视频Feed中的便利贴。我正在使用emguCV进行检测。我尝试使用形状检测方法,但它无法识别后它...也许是因为我把它举到空中,所以我的手指阻碍了顶点。
我也尝试过使用SURF检测,但是我认为它不起作用,因为它是一个正方形,因此没有任何突出的功能。
我尝试使用HAAR / LBP分类,但是需要花费10个多小时来训练48个阳性和80个阴性的一个阶段,所以我放弃了。
无论如何,可以建议一种合适的方法来检测/识别视频输入中的便利贴吗?非常感谢。
答案 0 :(得分:2)
我最近遇到过类似的问题,这就是我解决它的方法。我刚刚在HSV频谱中使用了音符颜色来定位它。您只需选择一种既易于识别又不会在角度下变化很大的颜色。
我已经用这个代码控制了一架带有2个便条贴的AR无人机,所以它必须是可靠而快速的。 Here it is in action。希望它有所帮助。
def centerFromImage(image, hue_min, hue_max):
image = cv2.cvtColor(image, cv2.cv.CV_RGB2HSV)
hue = image[:, :, 0]
# Filter out green postit note color
# yellow is 90-100
# pink is 137-150
# green is 80-90
hue[hue < hue_min] = 0
hue[hue > hue_max] = 0
hue[hue > 0] = 255
hue = cv2.erode(hue, None, iterations=2)
hue = cv2.dilate(hue, None, iterations=2)
contours, hierarchy = cv2.findContours(
hue,
cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE
)
center = [0, 0]
if len(contours) > 0:
contour = contours[0]
area = cv2.contourArea(contour)
for c in contours:
if cv2.contourArea(c) > area:
area = cv2.contourArea(c)
contour = c
m = cv2.moments(contour)
center = [0, 0]
if m['m00'] != 0:
center = [m['m10'] / m['m00'], m['m01'] / m['m00']]
center = [int(center[0]), int(center[1])]
return center