python - 间隔一段时间后用opencv拍摄视频

标签 python opencv datetime video

我是python的初学者,也是opencv的初学者。我想用 opencv videocapture 功能拍摄一段间隔的视频,比如说 10 秒,然后系统应该进入休眠模式一段时间,比如说 6 秒。然后它需要 10 秒的视频。两个视频都应该保存在单独的文件中。我的问题是,当我调用第一个函数时,它会保存第一个视频,但在调用 video2 函数时它不会保存视频。抱歉,代码安排不当。我是新用户。

import cv2
import time
def delay(delay_time):
     timeout = delay_time   # [seconds]

     timeout_start = time.time()

     print(time.strftime("%c"))
    while time.time() < timeout_start + timeout:
          test = 0
          if test == 3:

             break
          test -= 1
     print(time.strftime("%c"))

def video1():



   cap = cv2.VideoCapture(0)


   if (cap.isOpened() == False):
   print("Unable to read camera feed")

    frame_width = int(cap.get(3))
    frame_height = int(cap.get(4))

    out = cv2.VideoWriter('Data/output1.avi', 
    cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), 10, (frame_width, frame_height))

   while time.time() < time_start + closing_time:
         ret, frame = cap.read()

         if ret == True:
        out.write(frame)

           cv2.imshow('frame', frame)

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

            else:
                break

   cap.release()
   out.release()

def video2():


   cap = cv2.VideoCapture(0)

   if (cap.isOpened() == False):
   print("Unable to read camera feed")

    frame_width = int(cap.get(3))
    frame_height = int(cap.get(4))

    out = cv2.VideoWriter('Data/output2.avi', 
    cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), 10, (frame_width, frame_height))

   while time.time() < time_start + closing_time:
         ret, frame = cap.read()

         if ret == True:

            out.write(frame)

           cv2.imshow('frame', frame)

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

            else:
                break

   cap.release()
   out.release()

   cv2.destroyAllWindows()


   cv2.destroyAllWindows()
   print(time.strftime("%c"))
   video1()
   delay(6)
   print(time.strftime("%c"))
   video2()

最佳答案

您的代码有很多缩进问题,我什至无法指向 1 个位置并说这是一个问题。所以我在这里重新排列了你的代码。你甚至没有定义 time_startclosing_time在你的代码中。但我假设你的真实代码有它们,问题只是第二个视频输出不正确。那是因为你必须定义 time_startvideo1 的开头和 video2 .如果不重新定义time_start ,当您到达 video2 时这个while time.time() < time_start + closing_time:已经用尽,将是 False。所以没有真正的视频被写入文件。

import cv2
import time
def delay(delay_time):
    timeout = delay_time   # [seconds]
    timeout_start = time.time()
    print(time.strftime("%c"))
    while time.time() < timeout_start + timeout:
        test = 0
        if test == 3:
            break
            test -= 1
    print(time.strftime("%c"))

def video1():
    time_start = time.time()
    cap = cv2.VideoCapture(0)
    if (cap.isOpened() == False):
        print("Unable to read camera feed")
    frame_width = int(cap.get(3))
    frame_height = int(cap.get(4))
    print(frame_width,frame_height)
    out = cv2.VideoWriter('output1.avi', 
        cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), 10, (frame_width, frame_height))

    while time.time() < time_start + closing_time:
        ret, frame = cap.read()
        if ret == True:
            out.write(frame)
            #cv2.imshow('frame', frame)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
        else:
            break

    cap.release()
    out.release()

def video2():
    time_start = time.time()
    cap = cv2.VideoCapture(0)
    if (cap.isOpened() == False):
        print("Unable to read camera feed")
    frame_width = int(cap.get(3))
    frame_height = int(cap.get(4))
    print(frame_width,frame_height)
    out = cv2.VideoWriter('output2.avi', 
    cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), 10, (frame_width, frame_height))
    while time.time() < time_start + closing_time:
        ret, frame = cap.read()
        if ret == True:
            out.write(frame)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
        else:
            break
    cap.release()
    out.release()

print(time.strftime("%c"))
closing_time = 10
video1()
delay(6)
print(time.strftime("%c"))
video2()
# this loop is here because sometimes cv2 has problems destroying windows
# if you call it once. so to be safe I call it 10 times
for _ in range(10):
    cv2.destroyAllWindows()

关于python - 间隔一段时间后用opencv拍摄视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46453783/

相关文章:

python - 值对于定义的数据类型来说太大

opencv - 使用opencv编译嵌入式 Axis 相机软件。进行文件更改

django - 以单独的输入形式显示 django DateTimeRangeField()

python - 卸载安装有 `pip install --egg` 的 python 包

python - scipy 稀疏矩阵除法

python - 将日期时间与日期时间范围进行比较

javascript - 0 使用JavaScript在日期字符串中填充日和月

c++ - vector 下标超出范围错误消息 3

opencv - 从图像中裁剪脸部

Javascript - 获取两个日期之间的日期数组