-1
Мне нужно читать кадры из видео параллельно с многопроцессорной обработкой & очередей с использованием opencv в Python, и я получаю сообщение об ошибке с моим кодом. Это мой код, и я не знаю, где моя проблема.чтение видеокадров параллельно с opencv и Python
#! /usr/bin/python
import numpy as np
import cv2
import multiprocessing as mp
import time
def read_frames(q1,q2):
while True :
frame = q1.get()
if frame=='Done':
break
R=frame[:,:,0]
G=frame[:,:,1]
B=frame[:,:,2]
y = (np.uint8)((0.299 * R)+ (0.587 *G) +(0.114 *B))
q2.put(y)
if __name__ == '__main__':
q1 = mp.Queue()
q2 = mp.Queue()
processes =[mp.Process(target=read_frames, args= (q1,q2)) for i in rang$
for p in processes:
p.start()
# feed the processes
# read input file and send to the processes the frames:
cap = cv2.VideoCapture('gou.avi')
lines = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
cols = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
fps = int(cap.get(cv2.CAP_PROP_FPS))
fourcc_ver = int(cap.get(cv2.CAP_PROP_FOURCC))
out = cv2.VideoWriter('output.avi',fourcc_ver, fps, (cols,lines),False)
# y = np.empty(shape=(lines,cols),dtype=np.uint8)
while(cap.isOpened()):
ret, frame = cap.read()
# as long as new frames are there
if ret==True:
q1.put(frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
q1.put('Done')
for p in processes:
p.join()
for p in processes:
result=[q2.get()]
# result.sort()
# results = [r[1] for r in results]
for i in result:
out.write(i)
# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()
с этим «y» я конвертирую видео из rgb в черно-белое – iyal
Если вы получаете сообщение об ошибке, отправьте его, чтобы другие могли его использовать, чтобы помочь вам диагностировать ваш код. – Palpatim
Вам нужно быть намного понятнее, объясняя, в чем проблема, как минимум, вам нужно объяснить полученную ошибку и то, что вы уже пытались решить. Я настоятельно рекомендую прочитать [как задать хороший вопрос?] (Http://stackoverflow.com/help/how-to-ask), а затем изменить свой вопрос, чтобы улучшить его, если вы хотите получить хорошие ответы. – DaveyDaveDave