21xrx.com
2024-11-09 06:10:20 Saturday
登录
文章检索 我的文章 写文章
简单实用的OpenCV目标跟踪算法代码
2023-11-17 02:56:39 深夜i     --     --
OpenCV 目标跟踪 算法代码 简单 实用

OpenCV是一个流行的开源计算机视觉库,提供了丰富的功能和算法,可以应用于各种图像处理和计算机视觉任务。其中一个常见的应用是目标跟踪,即从视频中识别并跟踪特定的目标。

在OpenCV中,有许多简单实用的目标跟踪算法代码可供使用。以下是其中一些常见的算法和代码示例。

1. 帧差法目标跟踪:

这是一种简单的目标跟踪方法,基于当前帧和前一帧之间的差异。它通过比较两个帧之间的像素值,并创建一个差异图像来找到目标位置。以下是使用OpenCV实现的帧差法目标跟踪的代码示例:

python

import cv2

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

ret, frame1 = cap.read()

frame1_gray = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)

while True:

  ret, frame2 = cap.read()

  if not ret:

    break

  frame2_gray = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)

  

  diff = cv2.absdiff(frame1_gray, frame2_gray)

  _, threshold = cv2.threshold(diff, 30, 255, cv2.THRESH_BINARY)

  contours, _ = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

  

  for contour in contours:

    if cv2.contourArea(contour) > 500:

      (x, y, w, h) = cv2.boundingRect(contour)

      cv2.rectangle(frame2, (x, y), (x+w, y+h), (0, 255, 0), 2)

  

  cv2.imshow("Tracking", frame2)

  

  if cv2.waitKey(1) == 27:

    break

  

  frame1_gray = frame2_gray

cv2.destroyAllWindows()

2. 光流法目标跟踪:

这是一种利用像素之间的运动信息来跟踪目标的方法。光流法通过分析连续帧之间的光强变化,推断像素的运动方向和速度。以下是使用OpenCV实现光流法目标跟踪的代码示例:

python

import cv2

import numpy as np

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

ret, frame1 = cap.read()

prvs = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)

hsv = np.zeros_like(frame1)

hsv[..., 1] = 255

while True:

  ret, frame2 = cap.read()

  if not ret:

    break

  next = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)

  

  flow = cv2.calcOpticalFlowFarneback(prvs, next, None, 0.5, 3, 15, 3, 5, 1.2, 0)

  mag, ang = cv2.cartToPolar(flow[..., 0], flow[..., 1])

  hsv[..., 0] = ang*180/np.pi/2

  hsv[..., 2] = cv2.normalize(mag, None, 0, 255, cv2.NORM_MINMAX)

  bgr = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)

  

  cv2.imshow('Tracking', bgr)

  

  if cv2.waitKey(1) == 27:

    break

  

  prvs = next

cv2.destroyAllWindows()

这些是OpenCV中两种常见的简单实用的目标跟踪算法。帧差法适用于背景相对稳定的场景下的目标跟踪,而光流法适用于场景中存在较多运动的目标跟踪。根据具体的需求和场景选择合适的算法进行目标跟踪,可以在各种计算机视觉应用中实现准确的目标定位和追踪。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复