Opencv 在知道特征在图像中的确切位置后,在所有后续帧上跟踪它

Opencv 在知道特征在图像中的确切位置后,在所有后续帧上跟踪它,opencv,computer-vision,Opencv,Computer Vision,我有一种昂贵的计算方法,可以找到图像中某个特征的精确边界框。在所有后续图像上,该功能可能已移动。我希望避免在每一帧上都执行这种计算代价高昂的过程。在边界框已知一次后,是否有一种技术可以使用背景减法+轮廓检测来跟踪特征? 链接中的python示例代码: import cv2 import sys if __name__ == '__main__' : # Set up tracker. # Instead of MIL, you can also use # BOOSTING, KCF, TL

我有一种昂贵的计算方法,可以找到图像中某个特征的精确边界框。在所有后续图像上,该功能可能已移动。我希望避免在每一帧上都执行这种计算代价高昂的过程。在边界框已知一次后,是否有一种技术可以使用背景减法+轮廓检测来跟踪特征?

链接中的python示例代码:

import cv2
import sys

if __name__ == '__main__' :

# Set up tracker.
# Instead of MIL, you can also use
# BOOSTING, KCF, TLD, MEDIANFLOW or GOTURN

tracker = cv2.Tracker_create("MIL")

# Read video
video = cv2.VideoCapture("videos/chaplin.mp4")

# Exit if video not opened.
if not video.isOpened():
    print "Could not open video"
    sys.exit()

# Read first frame.
ok, frame = video.read()
if not ok:
    print 'Cannot read video file'
    sys.exit()

# Define an initial bounding box
bbox = (287, 23, 86, 320) # x, y, width, height

# Uncomment the line below to select a different bounding box
# bbox = cv2.selectROI(frame, False)

# Initialize tracker with first frame and bounding box
ok = tracker.init(frame, bbox)

while True:
    # Read a new frame
    ok, frame = video.read()
    if not ok:
        break

    # Update tracker
    ok, bbox = tracker.update(frame)

    # Draw bounding box
    if ok:
        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))

    # Display result
    cv2.imshow("Tracking", frame)

    # Exit if ESC pressed
    k = cv2.waitKey(1) & 0xff
    if k == 27 : break

希望这有帮助

尝试openCV 3.1的TLD跟踪边界框中点的顺序是什么?当我尝试这种方法时,我得到一个4值的元组,顺序如下:1。边界框2左上角点的x坐标。边界框3左上角点的y坐标。边界框的宽度4。边界框的高度坐标如何为1值?