美文网首页
OpenCV上八种不同的目标追踪算法

OpenCV上八种不同的目标追踪算法

作者: 魏云舒 | 来源:发表于2018-11-02 19:20 被阅读0次

    原网址

    1. 在运行代码的时候遇到的问题
      module 'cv2.cv2' has no attribute 'TrackerKCF_create'
    2. opencv上的这八种算法是否开源,我能否对其进行修改,适合自己的特定场景

    最近想了解opencv的跟踪模块,可却出现一下情况的报错:


    what ,为什么opencv中没有这个模块,找到一个解决方案
    原文链接

    可是安装opencv-contrib-python 速度极慢,不可等待,只能通过镜像源安装:
    原文链接

    可是问题依旧:
    这时候就要看我的tracking module有没有安装上
    原文链接

    结果是:

    卧槽,问题的解决方式竟然在原帖的评论区当中,枉我在这里苦苦寻觅一整天:
    原文链接


    安装opencv-contrib之前要卸载opencv,竟然是这个原因,崩溃。

    代码如下:

    # USAGE
    # python opencv_object_tracking.py
    # python opencv_object_tracking.py --video dashcam_boston.mp4 --tracker csrt
    
    # import the necessary packages
    from imutils.video import VideoStream
    from imutils.video import FPS
    import argparse
    import imutils
    import time
    import cv2
    
    # construct the argument parser and parse the arguments
    ap = argparse.ArgumentParser()
    ap.add_argument("-v", "--video", type=str, default="./race.mp4", help="path to input video file")
    ap.add_argument("-t", "--tracker", type=str, default="kcf", help="OpenCV object tracker type")
    args = vars(ap.parse_args())
    
    # extract the OpenCV version info
    (major, minor) = cv2.__version__.split(".")[:2]
    
    # if we are using OpenCV s3.2 OR BEFORE, we can use a special factory
    # function to create our object tracker
    if int(minor) < 3:
        tracker = cv2.Tracker_create(args["tracker"].upper())
    
    # otherwise, for OpenCV 3.3 OR NEWER, we need to explicity call the
    # approrpiate object tracker constructor:
    else:
        # initialize a dictionary that maps strings to their corresponding
        # OpenCV object tracker implementations
        OPENCV_OBJECT_TRACKERS = {
            "csrt": cv2.TrackerCSRT_create,
            "kcf": cv2.TrackerKCF_create,
            "boosting": cv2.TrackerBoosting_create,
            "mil": cv2.TrackerMIL_create,
            "tld": cv2.TrackerTLD_create,
            "medianflow": cv2.TrackerMedianFlow_create,
            "mosse": cv2.TrackerMOSSE_create
        }
    
        # grab the appropriate object tracker using our dictionary of
        # OpenCV object tracker objects
        tracker = OPENCV_OBJECT_TRACKERS[args["tracker"]]()
    
    # initialize the bounding box coordinates of the object we are going
    # to track
    initBB = None
    
    # if a video path was not supplied, grab the reference to the web cam
    if not args.get("video", False):
        print("[INFO] starting video stream...")
        vs = VideoStream(src=0).start()
        time.sleep(1.0)
    
    # otherwise, grab a reference to the video file
    else:
        vs = cv2.VideoCapture(args["video"])
    
    # initialize the FPS throughput estimator
    fps = None
    
    # loop over frames from the video stream
    while True:
        # grab the current frame, then handle if we are using a
        # VideoStream or VideoCapture object
        frame = vs.read()
        frame = frame[1] if args.get("video", False) else frame
    
        # check to see if we have reached the end of the stream
        if frame is None:
            break
    
        # resize the frame (so we can process it faster) and grab the
        # frame dimensions
        frame = imutils.resize(frame, width=500)
        (H, W) = frame.shape[:2]
    
        # check to see if we are currently tracking an object
        if initBB is not None:
            # grab the new bounding box coordinates of the object
            (success, box) = tracker.update(frame)
    
            # check to see if the tracking was a success
            if success:
                (x, y, w, h) = [int(v) for v in box]
                cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
    
            # update the FPS counter
            fps.update()
            fps.stop()
    
            # initialize the set of information we'll be displaying on
            # the frame
            info = [
                ("Tracker", args["tracker"]),
                ("Success", "Yes" if success else "No"),
                ("FPS", "{:.2f}".format(fps.fps())),
            ]
    
            # loop over the info tuples and draw them on our frame
            for (i, (k, v)) in enumerate(info):
                text = "{}: {}".format(k, v)
                cv2.putText(frame, text, (10, H - ((i * 20) + 20)),
                            cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 255), 2)
    
        # show the output frame
        cv2.imshow("Frame", frame)
        key = cv2.waitKey(20) & 0xFF
    
        # if the 's' key is selected, we are going to "select" a bounding
        # box to track
        if key == ord("s"):
            # select the bounding box of the object we want to track (make
            # sure you press ENTER or SPACE after selecting the ROI)
            initBB = cv2.selectROI("Frame", frame, fromCenter=False,
                                   showCrosshair=True)
    
            # start OpenCV object tracker using the supplied bounding box
            # coordinates, then start the FPS throughput estimator as well
            tracker.init(frame, initBB)
            fps = FPS().start()
    
        # if the `q` key was pressed, break from the loop
        elif key == ord("q"):
            break
    
    # if we are using a webcam, release the pointer
    if not args.get("video", False):
        vs.stop()
    
    # otherwise, release the file pointer
    else:
        vs.release()
    
    # close all windows
    cv2.destroyAllWindows()
    

    相关文章

      网友评论

          本文标题:OpenCV上八种不同的目标追踪算法

          本文链接:https://www.haomeiwen.com/subject/nhecxqtx.html