【问题标题】:Marking a detected object through Masking通过 Masking 标记检测到的对象
【发布时间】:2018-01-17 06:19:15
【问题描述】:

我正在关注this 链接,以解决problem of mine。在第一个链接中,它提到,我们可以创建一个“掩码”,如果下一个对象非常靠近那个“掩码”,我们将不会检测到它,因为它可能是同一个对象。但是如果它有距离,我们应该检测它,然后跟踪它直到最后。

但我不知道如何创建掩码并使用条件语句将其排除。所以,第一个问题是创建面具。如果我可以创建对象的掩码,那么我可以尝试将其从下一次检测中排除。

import cv2
import numpy as np

cap = cv2.VideoCapture('anyvideo.mp4')

while(1):

    # Take each frame
    ret, frame = cap.read()

    if ret:

        # detect the object  and get contour of the image. I'm calling it bbox

        tracker = cv2.Tracker_create("KCF")
        ok = tracker.init(frame, tuple(bbox))
        ok, bbox = tracker.update(frame)
        p1 = (int(bbox[0]), int(bbox[1]))
        p2 = (int(bbox[0] + bbox[2]), int(bbox[1] + bbox[3]))
        cv2.rectangle(frame, p1, p2, (0,0,255))
        cv2.putText(frame, 'Tracked', (x + 25,y + 10), cv2.FONT_HERSHEY_SIMPLEX,1, (255,255,255), 2, cv2.LINE_AA)
        mask = np.full((frame.shape[0], frame.shape[1]), 0, dtype=np.uint8)
        res = res.append(cv2.bitwise_and(frame,frame,mask = mask))


        k = cv2.waitKey(5) & 0xFF
        if k == 27:
            break
    else:
        break
cap.release()
cv2.destroyAllWindows()

谢谢!

【问题讨论】:

    标签: python opencv tracking object-detection


    【解决方案1】:

    首先,为reference拍摄一张没有物体、背景相同的图像。然后减去对象所在的图像。它会给你一些价值,期望零,对象存在的地方。对其执行二进制阈值。现在您将拥有单独的对象。将其用作掩码

    【讨论】:

    • 感谢您的回答。我已经创建了掩码并相应地更新了代码。现在如何使用它作为过滤器来删除已跟踪的图像。
    • 正如我之前建议的,Perform binary threshold on it.,在此之后您可以对其进行轮廓分析。计算它的质心并裁剪对象的适当区域。有了质心,就可以计算出相对位置。算法的其余部分取决于您自己的逻辑。您可以使用任何算法或您自己的逻辑来跟踪对象。
    • @arijit,如果你需要任何帮助,你可以问。如果您觉得此答案有帮助,请投票并选择作为答案。
    • 实际上我正在尝试您的选择。但直到现在我都没有成功。所以我没有标记你的答案。
    • 现在你遇到什么问题了?
    猜你喜欢
    • 2018-04-19
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多