mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
92 lines
2.4 KiB
Python
92 lines
2.4 KiB
Python
|
# SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
|
||
|
# SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||
|
import argparse
|
||
|
|
||
|
import cv2 as cv
|
||
|
import numpy as np
|
||
|
|
||
|
|
||
|
def open_picture(path): # type: (str) -> list[int]
|
||
|
with open(path, 'rb') as f:
|
||
|
data = f.read()
|
||
|
f.close()
|
||
|
new_data = [int(x) for x in data]
|
||
|
return new_data
|
||
|
|
||
|
|
||
|
def picture_show_rgb888(data, h, w): # type: (list[int], int, int) -> None
|
||
|
data = np.array(data).reshape(h, w, 3).astype(np.uint8)
|
||
|
cv.imshow('data', data)
|
||
|
cv.waitKey()
|
||
|
|
||
|
|
||
|
def picture_show_rgb565(data, h, w): # type: (list[int], int, int) -> None
|
||
|
|
||
|
new_data = [0] * ((len(data) // 2) * 3)
|
||
|
for i in range(len(data)):
|
||
|
if i % 2 != 0:
|
||
|
new_data[3 * (i - 1) // 2 + 2] = (data[i] & 0xf8)
|
||
|
new_data[3 * (i - 1) // 2 + 1] |= (data[i] & 0x7) << 5
|
||
|
else:
|
||
|
new_data[3 * i // 2] = (data[i] & 0x1f) << 3
|
||
|
new_data[3 * i // 2 + 1] |= (data[i] & 0xe0) >> 3
|
||
|
|
||
|
new_data = np.array(new_data).reshape(h, w, 3).astype(np.uint8)
|
||
|
cv.imshow('data', new_data)
|
||
|
cv.waitKey()
|
||
|
|
||
|
|
||
|
def picture_show_gray(data, h, w): # type: (list[int], int, int) -> None
|
||
|
new_data = np.array(data).reshape(h, w, 1).astype(np.uint8)
|
||
|
cv.imshow('data', new_data)
|
||
|
cv.waitKey()
|
||
|
|
||
|
|
||
|
def main(): # type: () -> None
|
||
|
parser = argparse.ArgumentParser(description='which mode need to show')
|
||
|
|
||
|
parser.add_argument(
|
||
|
'--pic_path',
|
||
|
type=str,
|
||
|
help='What is the path of your picture',
|
||
|
required=True)
|
||
|
|
||
|
parser.add_argument(
|
||
|
'--pic_type',
|
||
|
type=str,
|
||
|
help='What type you want to show',
|
||
|
required=True,
|
||
|
choices=['rgb565', 'rgb888', 'gray'])
|
||
|
|
||
|
parser.add_argument(
|
||
|
'--hight',
|
||
|
type=int,
|
||
|
help='the picture hight',
|
||
|
default=480)
|
||
|
|
||
|
parser.add_argument(
|
||
|
'--width',
|
||
|
type=int,
|
||
|
help='the picture width',
|
||
|
default=640)
|
||
|
|
||
|
args = parser.parse_args()
|
||
|
|
||
|
hight = args.hight
|
||
|
width = args.width
|
||
|
|
||
|
data = open_picture(args.pic_path)
|
||
|
|
||
|
if (args.pic_type == 'rgb565'):
|
||
|
picture_show_rgb565(data, hight, width)
|
||
|
elif (args.pic_type == 'rgb888'):
|
||
|
picture_show_rgb888(data, hight, width)
|
||
|
elif (args.pic_type == 'gray'):
|
||
|
picture_show_gray(data, hight, width)
|
||
|
else:
|
||
|
print('This type is not supported in this script!')
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
main()
|