Я хочу использовать ffmpeg в качестве посредника для выполнения каких-либо функций. Кадры камеры будут считаны через opencv и переданы в ffmpeg для обработки. FFMPEG необходимо передать обработанные кадры в opencv для отображения. Ниже показано, что я пробовал. Код зависает и ничего не отображает. Любая помощь будет оценена по достоинству.
import cv2
import math
import subprocess as sp
import ffmpeg
import numpy as np
def main():
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("Camera can't open\nexit")
return -1
width = 640
height = 480
fps = 30
out = process = (
ffmpeg
.input('pipe:', vsync=0, hwaccel='cuda', hwaccel_output_format='cuda', format='rawvideo', pix_fmt='bgr24', s=f'{width}x{height}', r=f'{fps}')
.filter('setsar', sar=1) # Keep the aspect ratio
.output('pipe:', format='rawvideo', pix_fmt='bgr24')
.run_async(pipe_stdin=True, pipe_stdout=True)
)
while True:
success, frame = cap.read()
img = cv2.cvtColor(frame, cv2.COLOR_BayerBG2BGR)
process.stdin.write(img.tobytes())
arr = np.frombuffer(process.stdout.read(width*height*3), dtype=np.uint8)
cv2.imshow("webcam",arr))
cv2.waitKey(0)
if __name__ == "__main__":
main()
Подробнее здесь: https://stackoverflow.com/questions/785 ... -in-python