mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
68 lines
2.0 KiB
Python
68 lines
2.0 KiB
Python
# This work is licensed under the MIT license.
|
|
# Copyright (c) 2013-2023 OpenMV LLC. All rights reserved.
|
|
# https://github.com/openmv/openmv/blob/master/LICENSE
|
|
#
|
|
# Draw Image Example with custom color palette
|
|
#
|
|
# This example shows off how to draw images in the frame buffer with a custom generated color palette.
|
|
|
|
import sensor
|
|
import image
|
|
import time
|
|
|
|
sensor.reset()
|
|
sensor.set_pixformat(sensor.GRAYSCALE) # or GRAYSCALE...
|
|
sensor.set_framesize(sensor.QQVGA) # or QQVGA...
|
|
sensor.skip_frames(time=2000)
|
|
clock = time.clock()
|
|
|
|
# the color palette is actually an image, this allows you to use image ops to create palettes
|
|
# the image must have 256 entries i.e. 256x1, 64x4, 16x16 and have the format rgb565
|
|
|
|
# Initialise palette source colors into an image
|
|
palette_source_colors = [(255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 0, 255)]
|
|
palette_source_color_image = image.Image(len(palette_source_colors), 1, sensor.RGB565)
|
|
for i, color in enumerate(palette_source_colors):
|
|
palette_source_color_image[i] = color
|
|
|
|
# Scale the image to palette width and smooth them
|
|
palette = image.Image(256, 1, sensor.RGB565)
|
|
palette.draw_image(
|
|
palette_source_color_image,
|
|
0,
|
|
0,
|
|
x_scale=palette.width() / palette_source_color_image.width(),
|
|
)
|
|
palette.mean(int(palette.width() / palette_source_color_image.width() / 2))
|
|
|
|
while True:
|
|
clock.tick()
|
|
|
|
img = sensor.snapshot()
|
|
# Get a copy of grayscale image before converting to color
|
|
img_copy = img.copy()
|
|
|
|
img.to_rgb565()
|
|
|
|
palette_boundary_inset = int(sensor.width() / 40)
|
|
palette_scale_x = (sensor.width() - palette_boundary_inset * 2) / palette.width()
|
|
|
|
img.draw_image(img_copy, 0, 0, color_palette=palette)
|
|
img.draw_image(
|
|
palette,
|
|
palette_boundary_inset,
|
|
palette_boundary_inset,
|
|
x_scale=palette_scale_x,
|
|
y_scale=8,
|
|
)
|
|
img.draw_rectangle(
|
|
palette_boundary_inset,
|
|
palette_boundary_inset,
|
|
int(palette.width() * palette_scale_x),
|
|
8,
|
|
color=(255, 255, 255),
|
|
thickness=1,
|
|
)
|
|
|
|
print(clock.fps())
|