3

我正在尝试使用带有 Python的OpenCV从我的笔记本电脑相机中保存 2 个具有相同大小和像素值的帧的视频。我正在更改第二个视频中帧中某些像素的 RGB 值。我想保存视频,它们之间没有任何区别,除了我更改的像素,但是当我使用cv2.VideoWriter时,有一个压缩视频的fourcc编解码器,我的项目失败了,因为我想检索更改的信息在像素之后。视频有不同的大小和不同的像素值。例如,使用以下代码,我录制了一秒钟的视频并将其保存两次(第二个视频的像素已更改)。

import cv2
from numpy import *
# Create a VideoCapture object
cap = cv2.VideoCapture(0)

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

# Get the default resolution.
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))

out = cv2.VideoWriter('outpy.avi',cv2.VideoWriter_fourcc(*"XVID"), 25, (frame_width,frame_height))
out2 = cv2.VideoWriter('outpy2.avi',cv2.VideoWriter_fourcc(*"XVID"), 25, (frame_width,frame_height))
while(True):
  ret, frame = cap.read()
  if ret == True: 

    # changing the BGR values 
    out.write(frame)
    frame[1,1,0] = 255
    frame[1,1,1] = 255
    frame[1,1,2] = 255
    out2.write(frame)

    # Display the resulting frame    
    cv2.imshow('frame',frame)

    # Press Q on keyboard to stop recording
    if cv2.waitKey(1) & 0xFF == ord('q'):
      break

  # Break the loop
  else:
    break 

# When everything done, release the video capture and video write objects
cap.release()
out.release()
out2.release()
# Closes all the frames
cv2.destroyAllWindows() 

第一个视频的大小为314 120 字节,第二个视频的大小为314 452 字节,视频中帧像素的值也不同。所以我尝试使用“Lagarith Lossless Video Codec”来避免压缩,例如:out=cv2.VideoWriter('outpy.avi',cv2.VideoWriter_fourcc(*"LAGS"), 25, (frame_width,frame_height)),但我收到一个错误:找不到编解码器 id 146 的编码器:找不到编码器。 在此之后,我尝试使用第一个链接从https://lags.leetcode.net/codec.html下载 LAGS 编解码器,我安装了编解码器,但遇到了同样的错误。我不知道问题出在哪里。如果我没记错的话,我的问题是因为使用fourcc 编解码器的压缩。LAGS 编解码器是一种解决方案吗?如果不是,请提出解决方法。

4

0 回答 0