0

我有一个从文件夹中获取视频并使用轮廓和背景减法进行一些计算的代码。之后,我将把编辑后的视频保存到文件夹中。代码如下所示:

import numpy as np
import cv2
import time

# Capture video from file
cap = cv2.VideoCapture('test_video.mp4')
time.sleep(1)
fgbg = cv2.createBackgroundSubtractorMOG2()
j = 0

fourcc = cv2.VideoWriter_fourcc(*'MPEG')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))

while (cap.isOpened()):
    ret, frame = cap.read()

    if ret == True:

        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        fgmask = fgbg.apply(gray)
        _, contours, _ = cv2.findContours(fgmask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

        if contours:
            areas = []
            for contour in contours:
                ar = cv2.contourArea(contour)
                areas.append(ar)

            max_area = max(areas or [0])
            max_area_index = areas.index(max_area)
            cnt = contours[max_area_index]
            M = cv2.moments(cnt)
            x, y, w, h = cv2.boundingRect(cnt)
            cv2.drawContours(fgmask, [cnt], 0, (255,255,255), 3, maxLevel = 0)

            if h < w:
                j += 1

            if j>10:
                cv2.rectangle(frame,(x,y),(x+w,y+h),(0,0,255),2)

            if h > w:
                j = 0
                cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)

            cv2.imshow('video',frame)
            out.write(frame)

            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
    else:
        break

cap.release()
out.release()
cv2.destroyAllWindows()

这将打开一个窗口并播放视频,然后创建output.avi,但它不包含任何内容。 cmd什么都不生产。我只是无法以正确的方式保存文件。

请推荐解决此问题的方法

4

1 回答 1

0

错误告诉您frame没有 3 或 4 个通道。

  1. 你能检查你的相机是否正确初始化

    if not cap.isOpened():
        print("Camera not initialized")
        return
    
  2. 它正在返回一个有效的框架

    if not ret:
        print("Problem reading frame")
        return
    else:
        # Convert your frame to gray and find contours etc.
    
于 2018-10-19T01:47:52.830 回答