Я пытаюсь записать видео с модулем питона малина камеры и затем преобразовать каждый кадр в кадре OpenCV без успеха:Как конвертировать picamera видеокадра объекта OpenCV
import time
import picamera
import cv2
import numpy as np
class BroadcastOutput(object):
def __init__(self, camera):
return
def write(self, b):
#create numpy array from b
data = np.fromstring(b, dtype=np.uint8)
#doesn't work with reshape either
#data = np.fromstring(b, dtype=np.uint8).reshape(320, 280, 3)
#enconde as image
image = cv2.imdecode(data, 1)
#test if is valid cv2 object -> fails
cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
def flush(self):
print('Waiting for background conversion process to exit')
#camera setup and start
with picamera.PiCamera() as camera:
camera.resolution = (320, 280)
camera.framerate = 24
time.sleep(2) # camera warm-up time
print('Initializing broadcast thread')
output = BroadcastOutput(camera)
print('Starting recording')
camera.start_recording(output, 'bgr')
try:
while True:
camera.wait_recording(1)
except KeyboardInterrupt:
pass
finally:
print('Stopping recording')
camera.stop_recording()
Когда я распечатать мой массив numpy имеет контент, объект изображения после декодирования, однако, всегда отсутствует.
Итак, мой вопрос: как правильно использовать предоставленные данные в b в качестве рамки cv2? Я все еще новичок в обработке изображений ... Спасибо за любую помощь заранее!
В чем смысл получения 'data' и' image' из 'b', когда вы игнорируете их и используете' b' в 'cvtColor'? Фактически, 'imdecode' кажется немного бессмысленным, учитывая, что вы переформатируете данные в 3-канальную матрицу. Весь этот фрагмент выглядит довольно странно .... –
youare совершенно правы ... длинный день;) Я попытался прояснить свои обрезки и предоставил полный и полезный пример –
. Какова длина 'b', когда вызывается' write'? Я не уверен, что вам гарантировано, что вы получите один «писать» за кадр. Обложки удобства, представленные в библиотеке, похоже, делают преобразование в 'flush'. | Если вы посмотрите на функцию '' bytes_to_rgb' (http://picamera.readthedocs.io/en/release-1.8/_modules/picamera/array.html), подход 'np.fromstring', кажется, находится в правильном направлении направление, предполагая, что у вас есть весь фрейм. –