Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Can't save video

Hi, I want to object detect and save the video, but I can't.

If there is no this line

x, y, width, height, area = stats[index]

it will be saved

Do you know why And is there a solution?

import cv2
import time
import numpy as np

cap = cv2.VideoCapture("rtsp://admin:[email protected]:554")

width = int(cap.get(3))
height = int(cap.get(4))
fcc = cv2.VideoWriter_fourcc(*'XVID')
recording = False
videono = 0

fgbg = cv2.createBackgroundSubtractorMOG2(varThreshold=200, detectShadows=0)

while(1):
    ret, frame = cap.read()
    hms = time.strftime('%H_%M_%S', time.localtime())

    fgmask = fgbg.apply(frame)

    nlabels, labels, stats, centroids = cv2.connectedComponentsWithStats(fgmask)

    for index, centroid in enumerate(centroids):
        if stats[index][0] == 0 and stats[index][1] == 0:
            continue
        if np.any(np.isnan(centroid)):
            continue

        # x, y, width, height, area = stats[index]
        centerX, centerY = int(centroid[0]), int(centroid[1])

        if area > 200:
            cv2.circle(frame, (centerX, centerY), 1, (0, 255, 0), 2)
            cv2.rectangle(frame, (x, y), (x + width, y + height), (0, 0, 255))
            cv2.putText(frame, str(area), (centerX, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 255))

    cv2.imshow('frame', frame)

    k = cv2.waitKey(1) & 0xff
    if k == ord('r') and recording is False:
        path = 'test_' + str(hms) + '.avi'
        print('recording start')
        writer = cv2.VideoWriter(path, fcc, 30.0, (width, height))
        recording = True

    if recording:
        writer.write(frame)

    if k == ord('e'):
        print('recording end')
        recording = False
        writer.release()

cap.release()
cv2.destroyAllWindows()

thanks

Can't save video

Hi, I want to object detect and save the video, but I can't.

If there is no this line

x, y, width, height, area = stats[index]

it will be saved

Do you know why And is there a solution?

import cv2
import time
import numpy as np

cap = cv2.VideoCapture("rtsp://admin:[email protected]:554")

width = int(cap.get(3))
height = int(cap.get(4))
fcc = cv2.VideoWriter_fourcc(*'XVID')
recording = False
videono = 0

fgbg = cv2.createBackgroundSubtractorMOG2(varThreshold=200, detectShadows=0)

while(1):
    ret, frame = cap.read()
    hms = time.strftime('%H_%M_%S', time.localtime())

    fgmask = fgbg.apply(frame)

    nlabels, labels, stats, centroids = cv2.connectedComponentsWithStats(fgmask)

    for index, centroid in enumerate(centroids):
        if stats[index][0] == 0 and stats[index][1] == 0:
            continue
        if np.any(np.isnan(centroid)):
            continue

        # x, y, width, height, area = stats[index]
        centerX, centerY = int(centroid[0]), int(centroid[1])

        if area > 200:
            cv2.circle(frame, (centerX, centerY), 1, (0, 255, 0), 2)
            cv2.rectangle(frame, (x, y), (x + width, y + height), (0, 0, 255))
            cv2.putText(frame, str(area), (centerX, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 255))

    cv2.imshow('frame', frame)

    k = cv2.waitKey(1) & 0xff
    if k == ord('r') and recording is False:
        path = 'test_' + str(hms) + '.avi'
        print('recording start')
        writer = cv2.VideoWriter(path, fcc, 30.0, (width, height))
        recording = True

    if recording:
        writer.write(frame)

    if k == ord('e'):
        print('recording end')
        recording = False
        writer.release()

cap.release()
cv2.destroyAllWindows()

thanks