美文网首页
OpenCV+Python 基本运动物体检测

OpenCV+Python 基本运动物体检测

作者: 音符纸飞机 | 来源:发表于2018-10-30 23:08 被阅读43次

通过计算视频中每帧图像之间的差,或者每帧图像与某个固定背景的差。该方法适用于背景相对静止(色彩、视角)的视频。

基本步骤
  1. 平滑当前帧
  2. 计算与背景帧的差
  3. 二值化、适当的形态学处理
  4. 寻找并适当的轮廓
  5. 在当前帧中标识轮廓区域区域
  6. 将当前帧设置为背景帧
    def run(self):
        self._window_manager.create_window()
        background = None
        diff = None
        es = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (9, 4))
        kernel = np.ones((5, 5), np.uint8)
        while self._window_manager.is_window_created:
            self._capture_manager.enter_frame()
            frame = self._capture_manager.frame
            if frame is not None:
                gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
                gray_frame = cv2.GaussianBlur(gray_frame, (9, 9), 0)
                if background is None:
                    background = gray_frame
                else:
                    diff_1 = cv2.absdiff(background, gray_frame)
                    background = gray_frame
                    diff_2 = cv2.threshold(diff_1, 10, 255, cv2.THRESH_BINARY)[1]
                    diff = cv2.dilate(diff_2, kernel, iterations=2)
                    image, cnts, hierarchy = cv2.findContours(diff.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
                    for c in cnts:
                        if cv2.contourArea(c) < 8000:
                            continue
                        (x, y, w, h) = cv2.boundingRect(c)
                        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 3)
                if diff is not None:
                    self._capture_manager.frame = diff
                else:
                    self._capture_manager.frame = background
                self._capture_manager.frame = frame
            self._capture_manager.exit_frame()
            self._window_manager.process_events()

其余代码请参考OpenCV+Python简易视频处理框架

基本运动检测.gif

相关文章

网友评论

      本文标题:OpenCV+Python 基本运动物体检测

      本文链接:https://www.haomeiwen.com/subject/krxftqtx.html