Как получить значения RGB изображения, снятого PiCam, в качестве матрицы? - PullRequest
1 голос
/ 07 июня 2019

Я пишу код для обработки изображения на снимке, сделанном камерой Raspberry Pi V2.Я не очень заинтересован в изображении так же сильно, как я в значениях RGB изображения.Есть ли способ сделать снимок, а затем создать матрицу этих значений?Спасибо!

Я пытался найти некоторые документы, но они никогда не работают.Вот пример одного из тех, которые я пробовал:

import time
import picamera
import numpy as np

with picamera.PiCamera() as camera:
    camera.resolution = (320, 240)
    camera.framerate = 24
    time.sleep(2)
    output = np.empty((240, 320, 3), dtype=np.uint8)
    camera.capture(output, 'rgb')

Это ошибка, которую я получаю, когда запускаю этот код ...

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/picamera/camera.py", line 456, 
in _init_camera
     self._camera = mo.MMALCamera()
   File "/usr/lib/python3/dist-packages/picamera/mmalobj.py", line 
 2279, in __init__
     super(MMALCamera, self).__init__()
  File "/usr/lib/python3/dist-packages/picamera/mmalobj.py", line 633, 
 in __init__
    prefix="Failed to create MMAL component %s" % self.component_type)
  File "/usr/lib/python3/dist-packages/picamera/exc.py", line 184, in 
mmal_check
    raise PiCameraMMALError(status, prefix)
picamera.exc.PiCameraMMALError: Failed to create MMAL component 
b'vc.ril.camera': Out of memory

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/pi/camerasample.py", line 5, in <module>
    with picamera.PiCamera() as camera:
  File "/usr/lib/python3/dist-packages/picamera/camera.py", line 431, 
in __init__
    self._init_camera(camera_num, stereo_mode, stereo_decimate)
  File "/usr/lib/python3/dist-packages/picamera/camera.py", line 460, 
in _init_camera
    "Camera is not enabled. Try running 'sudo raspi-config' "
picamera.exc.PiCameraError: Camera is not enabled. Try running 'sudo 
raspi-config' and ensure that the camera has been enabled.

У меня есть мойкамера включена, поэтому я не знаю, что делать ... (я новичок в этом, кстати)

Я запустил Raspistill, и теперь я получаю эту ошибку.Камера подключена, и она работала 30 минут назад ..

mmal: Cannot read camera info, keeping the defaults for OV5647 
mmal: mmal_vc_component_create: failed to create component 'vc.ril.camera' 
(1:ENOMEM)
mmal: mmal_component_create_core: could not create component 
 'vc.ril.camera' (1)
 mmal: Failed to create camera component
 mmal: main: Failed to create camera component
 mmal: Camera is not detected. Please check carefully the camera module is 
 installed correctly

1 Ответ

0 голосов
/ 08 июня 2019

Не уверен, что проблема здесь.Если я запускаю ваш точный код под ipython, я могу проверить тип output в конце и увидеть, что это массив Numpy:

In [7]: type(output)
Out[7]: numpy.ndarray

Я могу проверить, что его форма верна:

In [8]: output.shape                                           
Out[8]: (240, 320, 3)

И я могу проверить, что среднее значение выглядит разумным:

In [6]: output.mean()                                          
Out[6]: 99.991701388888885

И первые несколько значений выглядят разумными для моего темного офиса:

output                             
Out[12]: 
array([[[ 17,  11,  10],
        [ 15,   9,   8],
        [ 18,  14,  10],
        ..., 
        [ 21,  16,  15],
        [ 22,  18,  14],
        [ 25,  21,  17]],
        ...
        ..., 
        [253, 254, 251],
        [253, 254, 251],
        [253, 254, 251]]], dtype=uint8)

По сути, чтоЯ говорю, что output является матрицей ваших значений RGB.Итак, в верхнем левом углу изображения:

R = output[0,0,0]
G = output[0,0,1]
B = output[0,0,2]

и в нижнем правом углу:

R = output[239,319,0]
G = output[239,319,1]
B = output[239,319,2]

Среднее значение всех пикселей красного канала равно output[:,:,0].mean(), исреднее значение всех ваших синих пикселей составляет output[:,:,2].mean().

...