Как настроить цикл while для использования picamera? - PullRequest
0 голосов
/ 02 декабря 2018

Итак, я хочу прочитать отдельные кадры Picamera, используя цикл while.Вот что я нашел для этого, используя цикл for:

 # import the necessary packages
from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2

# initialize the camera and grab a reference to the raw camera capture
camera = PiCamera()
camera.resolution = (640, 480)
camera.framerate = 32
rawCapture = PiRGBArray(camera, size=(640, 480))

# allow the camera to warmup
time.sleep(0.1)

# capture frames from the camera
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
    # grab the raw NumPy array representing the image, then initialize the timestamp
    # and occupied/unoccupied text
    image = frame.array

    # show the frame
    cv2.imshow("Frame", image)
    key = cv2.waitKey(1) & 0xFF

    # clear the stream in preparation for the next frame
    rawCapture.truncate(0)

    # if the `q` key was pressed, break from the loop
    if key == ord("q"):
        break
cv2.destroyAllWindows()

Теперь, когда я использую приведенный выше код, я получаю видео-канал, но я планирую сделать то же самое, используя цикл while.Исходя из той же логики, я добавил цикл while что-то вроде этого:

while True:  frame1=camera.capture_continious(rawCapture,format="bgr",use_video_port=True)
        image1 = frame1.array
        # show the frame
        cv2.imshow("Frame1", image1)
        # clear the stream in preparation for the next frame
        rawCapture.truncate(0)

Но все же я получаю сообщение об ошибке, так как frame1 является генератором и не содержит таких атрибутов, в то время как тот же код работает сдля цикла.Какие модификации я могу сделать?

1 Ответ

0 голосов
/ 03 декабря 2018

Функция capture_continuous () возвращает бесконечный итератор изображений, снятых непрерывно с камеры.Он не возвращает ни одного изображения.Вот почему он работает с циклом for.

В вашем цикле while вы должны использовать функцию capture (), которая возвращает изображение.

Вы можете (и должны;))подробнее об этом в этой документации

...