便利贴的物体检测

时间:2014-02-13 12:55:37

标签: opencv detection emgucv feature-detection object-detection

我正在尝试使用对象检测识别视频Feed中的便利贴。我正在使用emguCV进行检测。我尝试使用形状检测方法,但它无法识别后它...也许是因为我把它举到空中,所以我的手指阻碍了顶点。

我也尝试过使用SURF检测,但是我认为它不起作用,因为它是一个正方形,因此没有任何突出的功能。

我尝试使用HAAR / LBP分类,但是需要花费10个多小时来训练48个阳性和80个阴性的一个阶段,所以我放弃了。

无论如何,可以建议一种合适的方法来检测/识别视频输入中的便利贴吗?非常感谢。

1 个答案:

答案 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