当前位置:   article > 正文

目标跟踪_geometric multigid

geometric multigid

一、检测移动的目标

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 - 与输入数组有相同大小的输出数组
  1. import cv2 as cv
  2. import numpy as np
  3. camera = cv.VideoCapture("D:/Temp/python_project/test_data/video/snow.mp4")
  4. es = cv.getStructuringElement(cv.MORPH_ELLIPSE, (9,4))
  5. kernel = np.ones((5,5), np.uint8)
  6. background = None
  7. while (True):
  8. ret, frame = camera.read()
  9. if ret:
  10. frame = cv.flip(frame, 1)
  11. img = frame
  12. if background is None:
  13. background = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
  14. background = cv.GaussianBlur(background, (21, 21), 0)
  15. continue
  16. gray_frame = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
  17. gray_frame = cv.GaussianBlur(gray_frame, (21, 21), 0)
  18. diff = cv.absdiff(background, gray_frame)
  19. diff = cv.threshold(diff, 25, 255, cv.THRESH_BINARY)[1]
  20. diff = cv.dilate(diff, es, kernel, iterations=2)
  21. cnts, hierarchy = cv.findContours(diff.copy(), cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
  22. for c in cnts:
  23. if cv.contourArea(c) < 1500:
  24. continue
  25. (x, y, w, h) = cv.boundingRect(c)
  26. cv.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
  27. cv.imshow("contours", img)
  28. cv.imshow("dif", diff)
  29. cv.waitKey(10)
  30. else:
  31. break
  32. cv.destroyAllWindows()
  33. camera.release()

 

二、背景分割器

1. KNN: K-Nea

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/1010505
推荐阅读
相关标签
  

闽ICP备14008679号