想做连续帧图片的行人跟踪 请问有什么思路吗?

GundamDyname 2018-11-01 04:25:44
现在识别出了每张图片上的行人 但我该怎么判断这一帧的这个人人和下一帧的人这个人是否是同一个人呢?
还要做到一直能识别到这个人 匹配点这种方法因为图片太小 试过了之后就放弃了
求大神给一些思路
...全文
85 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2018-11-23
  • 打赏
  • 举报
回复
视频处理也是一张张图片处理,没本质区别
GundamDyname 2018-11-23
  • 打赏
  • 举报
回复
引用 4 楼 赵4老师 的回复:
仅供参考:
#"Object Tracking using OpenCV (C++/Python)"
import cv2
import sys

(major_ver, minor_ver, subminor_ver) = (cv2.__version__).split('.')

if __name__ == '__main__' :

    # Set up tracker.
    # Instead of MIL, you can also use

    tracker_types = ['BOOSTING', 'MIL','KCF', 'TLD', 'MEDIANFLOW', 'GOTURN', 'MOSSE']
    tracker_type = tracker_types[2]

    if int(minor_ver) < 3:
        tracker = cv2.Tracker_create(tracker_type)
    else:
        if tracker_type == 'BOOSTING':
            tracker = cv2.TrackerBoosting_create()
        if tracker_type == 'MIL':
            tracker = cv2.TrackerMIL_create()
        if tracker_type == 'KCF':
            tracker = cv2.TrackerKCF_create()
        if tracker_type == 'TLD':
            tracker = cv2.TrackerTLD_create()
        if tracker_type == 'MEDIANFLOW':
            tracker = cv2.TrackerMedianFlow_create()
        if tracker_type == 'GOTURN':
            tracker = cv2.TrackerGOTURN_create()
        if tracker_type == 'MOSSE':
            tracker = cv2.TrackerMOSSE_create()

    # Read video
    video = cv2.VideoCapture("stage.mp4")

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

    for f in range(25*10):
        ok, frame = video.read()
        if not ok:
            print('Cannot read video file')
            sys.exit()


    # Uncomment the line below to select a different bounding box
    bbox = cv2.selectROI(frame, False)
    cv2.destroyWindow('ROI selector')
    print("selectROI:"+str(bbox))
    if bbox==(0,0,0,0):
        # Define an default bounding box
        bbox = (700, 255, 192, 473)
        print("You canceled selection. Use default "+str(bbox))

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

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

        # Start timer
        timer = cv2.getTickCount()

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

        # Calculate Frames per second (FPS)
        fps = cv2.getTickFrequency() / (cv2.getTickCount() - timer);

        # Draw bounding box
        if ok:
            # Tracking success
            p1 = (int(bbox[0]), int(bbox[1]))
            p2 = (int(bbox[0] + bbox[2]), int(bbox[1] + bbox[3]))
            cv2.rectangle(frame, p1, p2, (255,0,0), 2, 1)
        else :
            # Tracking failure
            cv2.putText(frame, "Tracking failure detected", (100,80), cv2.FONT_HERSHEY_SIMPLEX, 0.75,(0,0,255),2)

        # Display tracker type on frame
        cv2.putText(frame, tracker_type + " Tracker", (100,20), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (50,170,50),2);

        # Display FPS on frame
        cv2.putText(frame, "FPS : " + str(int(fps)), (100,50), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (50,170,50), 2);

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

        # Exit if ESC pressed
        k = cv2.waitKey(1) & 0xff
        if k == 27:
            break
        if k == 32:
            bbox1 = cv2.selectROI(frame, False)
            cv2.destroyWindow('ROI selector')
            print("selectROI:"+str(bbox1))
            if bbox1==(0,0,0,0):
                print("You canceled selection. Use old "+str(bbox))
            else:
                bbox=bbox1
            print("new selectROI:"+str(bbox))
            del tracker
            tracker = cv2.TrackerKCF_create()
            ok = tracker.init(frame, bbox)
            print(ok)
    cv2.destroyWindow('Tracking')

您好 请问如果我用图片而不是视频 还有可用的吗?
赵4老师 2018-11-20
  • 打赏
  • 举报
回复
仅供参考:
#"Object Tracking using OpenCV (C++/Python)"
import cv2
import sys

(major_ver, minor_ver, subminor_ver) = (cv2.__version__).split('.')

if __name__ == '__main__' :

# Set up tracker.
# Instead of MIL, you can also use

tracker_types = ['BOOSTING', 'MIL','KCF', 'TLD', 'MEDIANFLOW', 'GOTURN', 'MOSSE']
tracker_type = tracker_types[2]

if int(minor_ver) < 3:
tracker = cv2.Tracker_create(tracker_type)
else:
if tracker_type == 'BOOSTING':
tracker = cv2.TrackerBoosting_create()
if tracker_type == 'MIL':
tracker = cv2.TrackerMIL_create()
if tracker_type == 'KCF':
tracker = cv2.TrackerKCF_create()
if tracker_type == 'TLD':
tracker = cv2.TrackerTLD_create()
if tracker_type == 'MEDIANFLOW':
tracker = cv2.TrackerMedianFlow_create()
if tracker_type == 'GOTURN':
tracker = cv2.TrackerGOTURN_create()
if tracker_type == 'MOSSE':
tracker = cv2.TrackerMOSSE_create()

# Read video
video = cv2.VideoCapture("stage.mp4")

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

for f in range(25*10):
ok, frame = video.read()
if not ok:
print('Cannot read video file')
sys.exit()


# Uncomment the line below to select a different bounding box
bbox = cv2.selectROI(frame, False)
cv2.destroyWindow('ROI selector')
print("selectROI:"+str(bbox))
if bbox==(0,0,0,0):
# Define an default bounding box
bbox = (700, 255, 192, 473)
print("You canceled selection. Use default "+str(bbox))

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

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

# Start timer
timer = cv2.getTickCount()

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

# Calculate Frames per second (FPS)
fps = cv2.getTickFrequency() / (cv2.getTickCount() - timer);

# Draw bounding box
if ok:
# Tracking success
p1 = (int(bbox[0]), int(bbox[1]))
p2 = (int(bbox[0] + bbox[2]), int(bbox[1] + bbox[3]))
cv2.rectangle(frame, p1, p2, (255,0,0), 2, 1)
else :
# Tracking failure
cv2.putText(frame, "Tracking failure detected", (100,80), cv2.FONT_HERSHEY_SIMPLEX, 0.75,(0,0,255),2)

# Display tracker type on frame
cv2.putText(frame, tracker_type + " Tracker", (100,20), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (50,170,50),2);

# Display FPS on frame
cv2.putText(frame, "FPS : " + str(int(fps)), (100,50), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (50,170,50), 2);

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

# Exit if ESC pressed
k = cv2.waitKey(1) & 0xff
if k == 27:
break
if k == 32:
bbox1 = cv2.selectROI(frame, False)
cv2.destroyWindow('ROI selector')
print("selectROI:"+str(bbox1))
if bbox1==(0,0,0,0):
print("You canceled selection. Use old "+str(bbox))
else:
bbox=bbox1
print("new selectROI:"+str(bbox))
del tracker
tracker = cv2.TrackerKCF_create()
ok = tracker.init(frame, bbox)
print(ok)
cv2.destroyWindow('Tracking')

lichlichlichlich 2018-11-20
  • 打赏
  • 举报
回复
是想做人脸识别+运动检测?
「已注销」 2018-11-20
  • 打赏
  • 举报
回复
《OpenCV计算机视觉编程攻略(第3版)》 第13章 跟踪运动目标
「已注销」 2018-11-20
  • 打赏
  • 举报
回复
用opencv很简单,就上面那样,用C调用,百来行代码
smwhotjay 2018-11-02
  • 打赏
  • 举报
回复
要做特征什么计算吧。什么颜色啥的
worldy 2018-11-02
  • 打赏
  • 举报
回复
要判断是否有行人应该比较简单,将两幅图像做减法即可,要是判断是否同一个行人则不容易了

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧