21xrx.com
2025-04-07 18:30:20 Monday
文章检索 我的文章 写文章
简单实用的OpenCV目标跟踪算法代码
2023-11-17 02:56:39 深夜i     9     0
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中两种常见的简单实用的目标跟踪算法。帧差法适用于背景相对稳定的场景下的目标跟踪,而光流法适用于场景中存在较多运动的目标跟踪。根据具体的需求和场景选择合适的算法进行目标跟踪,可以在各种计算机视觉应用中实现准确的目标定位和追踪。

  
  

评论区

请求出错了