目标跟踪

一、检测移动的目标

cv2.getStructuringElement(shape, ksize, anchor) -> retval

返回进行形态操作后,指定大小和形状的元素,其中

  • shape - 元素的形状。

MORPH_RECT: 长方形结构元素

MORPH_ELLIPSE: 椭圆结构元素,即内接矩形Rect(0, 0, esize.width, esize.height)中的填充椭圆

MORPH_CROSS: 十字形结构元素

CV_SHAPE_CUSTOM: 自定义结构元素(OpenCV 1.x API)

  • ksize - 结构元素的大小。
  • anchor - 元素内的锚定位置。默认值(-1, -1)表示锚定位于中心。注意,只有MORPH_CROSS元素的形状取决于锚定位置。在其它情况下,锚只是调节形态学操作结果的移动量。

cv2.absdiff(src1, src2, dst) -> dst

计算两个数组 或 数组与标量 之间的每元素差的绝对值。其中

  • src1 - 第一个输入的数组或标量。
  • src2 - 第二个输入的数组或标量。
  • dst - 与输入数组有相同大小的输出数组
import cv2 as cv
import numpy as np

camera = cv.VideoCapture("D:/Temp/python_project/test_data/video/snow.mp4")
es = cv.getStructuringElement(cv.MORPH_ELLIPSE, (9,4))
kernel = np.ones((5,5), np.uint8)
background = None
while (True):
    ret, frame = camera.read()
    if ret:
        frame = cv.flip(frame, 1)
        img = frame

        if background is None:
            background = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
            background = cv.GaussianBlur(background, (21, 21), 0)
            continue
        gray_frame = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
        gray_frame = cv.GaussianBlur(gray_frame, (21, 21), 0)
        diff = cv.absdiff(background, gray_frame)
        diff = cv.threshold(diff, 25, 255, cv.THRESH_BINARY)[1]
        diff = cv.dilate(diff, es, kernel, iterations=2)
        cnts, hierarchy = cv.findContours(diff.copy(), cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
        for c in cnts:
            if cv.contourArea(c) < 1500:
                continue
            (x, y, w, h) = cv.boundingRect(c)
            cv.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
        cv.imshow("contours", img)
        cv.imshow("dif", diff)
        cv.waitKey(10)
    else:
        break
cv.destroyAllWindows()
camera.release()

 

二、背景分割器

1. KNN: K-Nea

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值