Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的视频写手返回的视频周围都是黑色的?_Python_Opencv_Video - Fatal编程技术网

Python 为什么我的视频写手返回的视频周围都是黑色的?

Python 为什么我的视频写手返回的视频周围都是黑色的?,python,opencv,video,Python,Opencv,Video,我正在尝试使用VideoWriter导出正在录制的视频。虽然它可以工作,但视频位于左上角,周围是黑色。我不知道为什么会这样。视频本身正在保存,我可以看到它,但我不知道为什么会有这么多的空白。这是我的密码: #!/usr/bin/env python import time import picamera import numpy as np import cv2 import traceback from pylepton import Lepton def main(flip_v = Fa

我正在尝试使用
VideoWriter
导出正在录制的视频。虽然它可以工作,但视频位于左上角,周围是黑色。我不知道为什么会这样。视频本身正在保存,我可以看到它,但我不知道为什么会有这么多的空白。这是我的密码:

#!/usr/bin/env python

import time
import picamera
import numpy as np
import cv2
import traceback
from pylepton import Lepton

def main(flip_v = False, alpha = 128, device = "/dev/spidev0.0"):
  # Create an array representing a 1280x720 image of
  # a cross through the center of the display. The shape of
  # the array must be of the form (height, width, color)
  a = np.zeros((240, 320, 3), dtype=np.uint8)
  lepton_buf = np.zeros((60, 80, 1), dtype=np.uint16)

  with picamera.PiCamera() as camera:
    #camera.resolution = (640, 480)
    #camera.framerate = 24
    #camera.vflip = flip_v
    #camera.start_preview()
    #camera.fullscreen = True
    # Add the overlay directly into layer 3 with transparency;
    # we can omit the size parameter of add_overlay as the
    # size is the same as the camera's resolution
    o = camera.add_overlay(np.getbuffer(a), size=(320,240), layer=3, alpha=int(alpha), crop=(0,0,80,60), vflip=flip_v)
    #Creating the VideoWriter object
    filename = time.strftime("%Y.%m.%d  %H.%M.%S", time.localtime()) + ".avi"
    fourcc =  cv2.cv.CV_FOURCC('I','4','2','0')
    out = cv2.VideoWriter(filename, fourcc, 8.0, (60, 80))

    k = 0

    try:
      time.sleep(0.2) # give the overlay buffers a chance to initialize
      with Lepton(device) as l:
        last_nr = 0
        while True:
          _,nr = l.capture(lepton_buf)
          #resize the frame before writing it to a file
          resized_frame = cv2.resize(a, (60, 80))

          out.write(np.uint8(rezised_frame))

          if nr == last_nr:
            # no need to redo this frame
            continue
          last_nr = nr
          cv2.normalize(lepton_buf, lepton_buf, 0, 65535, cv2.NORM_MINMAX)
          np.right_shift(lepton_buf, 8, lepton_buf)
          a[:lepton_buf.shape[0], :lepton_buf.shape[1], :] = lepton_buf
          o.update(np.getbuffer(a))

          # Once the program has run 2000 time break the loop
          k += 1

          if k == 2000:
                 out.release()
                 break

    except Exception:
      traceback.print_exc()
    finally:
      camera.remove_overlay(o)

这段代码似乎是按照您描述的问题编写的(80x60中的裁剪320x240)。除非我不明白。据我所知,相机运行速度为320x240,覆盖图显示左上角裁剪的80x60框,写入的帧是从覆盖图中获得的。很抱歉,覆盖图应该被注释掉。当视频显示在我的屏幕上时,它看起来很正常,但出于某种原因,导出的视频很奇怪。我以前从未用python编程过,所以我有点困惑为什么会发生这种情况。看看
调整大小的U帧
(用于编写图像),它使用
cv2。使用
a
调整大小
。什么是
a
(变量名不清楚)?它似乎是写入覆盖的缓冲区,它实际上是从320x240裁剪到80x60的,这将导致您得到的结果。您的代码试图做什么有点不清楚。我猜您需要与FLIR相机交互,并且需要合并两个信息流,但这在阅读代码时并不明显。我希望我能帮助你更多,但我自己对代码有点困惑,对这个领域不太了解。你是对的,我现在的问题是我无法保存
lepton\u buf
,这应该是FLIR提供的正常80x60图像。你可以尝试在
a[:lepton\u buf.shape[0]之后保存
a
,:lepton_buf.shape[1],:]=lepton_buf
,与您在通过
lepton_buf
更新之前对其执行的操作相同。似乎编写代码是为了执行您描述的问题(在80x60中裁剪320x240)。除非我不明白。据我所知,相机运行速度为320x240,覆盖图显示左上角裁剪的80x60框,写入的帧是从覆盖图中获得的。很抱歉,覆盖图应该被注释掉。当视频显示在我的屏幕上时,它看起来很正常,但出于某种原因,导出的视频很奇怪。我以前从未用python编程过,所以我有点困惑为什么会发生这种情况。看看
调整大小的U帧
(用于编写图像),它使用
cv2。使用
a
调整大小
。什么是
a
(变量名不清楚)?它似乎是写入覆盖的缓冲区,它实际上是从320x240裁剪到80x60的,这将导致您得到的结果。您的代码试图做什么有点不清楚。我猜您需要与FLIR相机交互,并且需要合并两个信息流,但这在阅读代码时并不明显。我希望我能帮助你更多,但我自己对代码有点困惑,对这个领域不太了解。你是对的,我现在的问题是我无法保存
lepton\u buf
,这应该是FLIR提供的正常80x60图像。你可以尝试在
a[:lepton\u buf.shape[0]之后保存
a
,:lepton_buf.shape[1],:]=lepton_buf
,与在通过
lepton_buf
更新之前对其执行的操作相同。