Capture luminance still Raspberry PI camera
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# python3 | |
# based on https://raspberrypi.stackexchange.com/questions/58871/pi-camera-v2-fast-full-sensor-capture-mode-with-downsampling/58941#58941 | |
import time | |
import picamera | |
import numpy as np | |
from PIL import Image | |
RESOLUTION = (1640, 1232) | |
# Calculate the actual image size in the stream (accounting for rounding | |
# of the resolution) | |
# Capturing yuv will round horizontal resolution to 16 multiple and vertical to 32 multiple | |
# see: https://picamera.readthedocs.io/en/release-1.12/recipes2.html#unencoded-image-capture-yuv-format | |
fwidth = (RESOLUTION[0] + 31) // 32 * 32 | |
fheight = (RESOLUTION[1] + 15) // 16 * 16 | |
print(f'frame size {fwidth}x{fheight}') | |
with picamera.PiCamera( | |
sensor_mode=4, # 1640x1232, full FoV, binning 2x2 | |
resolution=RESOLUTION, | |
framerate=40 | |
) as camera: | |
print('camera setup') | |
camera.rotation = 180 | |
time.sleep(2) # let the camera warm up and set gain/white balance | |
print('starting capture') | |
y_data = np.empty((fheight, fwidth), dtype=np.uint8) | |
try: | |
camera.capture(y_data, 'yuv') # YUV420 | |
except IOError: | |
pass | |
y_data = y_data[:RESOLUTION[1], :RESOLUTION[0]] # crop numpy array to RESOLUTION | |
# y_data now contains the Y-plane only | |
print('convert to Pillow image') | |
im = Image.fromarray(y_data, mode='L') # using luminance mode | |
print('saving...') | |
im.save('test.jpg') | |
im.save('test.bmp') | |
print('done') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment