[MaixCam]使用心得一:camera、display

前言

        "MaixCam"系列文章主要介绍一下本人在暑假期间使用该摄像头模组的心得。该摄像头模组相较于传统的K210、OpenMV有着很明显的优点:更清晰的LCD屏幕、更强大的支持yolo5的算力、更高清的摄像头。

        我认为如果你电赛选择摄像头模组,想要低学习成本实现电赛题目的基本要求,不想使用树莓派、OpenCV等工具,强烈建议使用MaixCam来替代OpenMV或K210,MaixCam的封装的函数大部分与前两者相同,可以对网上OpenMV和K210的资源轻松进行移植,并且实现效果更好。

        如果你想快速配置,直接跳转到总结部分即可。

camera配置

        MaixCAM 默认搭载了 GC4653 摄像头,该摄像头的配置已经很高,基本不需要对camera进行额外的配置。下面讲一讲camera具体的参数和配置:

模块导入

#导入camera、image和display
from maix import camera, image, display

        首先,你需要从maix函数库中导入camera、image和display。其中camera模块主要用于拍摄、调节摄像参数;image模块主要用于图像处理;display模块主要用于LCD显示。

创建Camera对象

#创建一个Camera类,命名为cam
cam = camera.Camera(
width: int = -1, 
height: int = -1, 
format: maix.image.Format = ..., 
device: str = None, 
fps: int = -1, 
buff_num: int = 3, 
open: bool = True)

        width,height用于调节摄像头拍摄图片的大小,最高支持2560x1440

        format是相机输出模式,常用的模式有FMT_RGB888、FMT_RGB565、FMT_GRAYSCALE

        device是摄像头设备路径,默认为NULL表示第一个,一般场景不对其进行设置

        fps是摄像头帧率,只支持30、60,60fps下最大支持分辨率1280x720,30fps下最大支持2560x1440

        buff_num是摄像头缓冲区,一般场景不对其进行设置

        open是摄像头开启标识,默认为True,一般场景不对其进行设置

#对摄像头进行简单配置 宽640 高480 彩图RGB888 60fps
cam = camera.Camera(640, 480, image.Format.FMT_RGB888, fps=60)

#跳过开头30fps,等待摄像头稳定
cam.skip_frames(30)

#从相机缓冲区获取一帧图像,返回image对象
img = cam.read()

        这样我们就对摄像头进行简单的设置,如果你想要对摄像头进行更深入设置,可以接着阅读本章节,如果你需要快速上手可以直接看display部分。

Camera中的函数

        接下来的部分,我将介绍一些常用的调整摄像头的函数,如果你需要了解更多,可以阅读Maixpy官网关于API中Camera部分的内容。

#设置相机水平翻转
cam.hmirror(True)

#设置相机垂直翻转
cam.vflip(True)

#设置相机曝光,摄像头会切换到手动曝光模式,该函数会影响isp从而影响摄像效果
#如果值 == -1 则返回曝光时间,如果值 != 0 则设置并返回曝光时间
cam.exposure(-1)

#切换回自动曝光模式,该参数值默认为1,即自动曝光
cam.exp_mode(0)

#设置相机增益,只有在手动曝光模式才能设置
#如果值 == -1,则返回相机增益,如果值 != 0,则设置并返回相机增益
cam.gain(-1)

#设置白平衡
#值 = 0 为自动模式,值 = 1为手动模式
cam.awb_mode(0)

#设置亮度,范围为[0,100]
#值 == -1 返回亮度值, 值 != 0,则设置并返回亮度值
cam.luma(-1)

#设置对比度,范围为[0,100]
#值 == -1 返回对比度, 值 != 0,则设置并返回对比度
cam.constrast(-1)

#设置相机饱和度,范围为 [0, 100]
#值 == -1 返回饱和度, 值 != 0,则设置并返回饱和度
cam.saturation(-1)

display配置 

        本章节将讲述如何使用display模块中的内容,使LCD屏幕上显示画面,并对屏幕显示内容进行操作。

创建Display对象

disp = display.Display(
width: int = -1, 
height: int = -1, 
format: maix.image.Format = ..., 
device: str = None, 
open: bool = True)

        width显示宽度,height显示高度,默认值为 -1 表示自动检测,如果宽度>最大设备支持宽度,则自动设置为最大设备支持宽度

        format是显示屏输出模式,常用的模式有FMT_RGB888、FMT_RGB565、FMT_GRAYSCALE,一般场景不对其进行设置,显示摄像机拍摄画面

        device是摄像头设备路径,默认为NULL表示第一个,一般场景不对其进行设置

        open是开启标识,默认为True,一般场景不对其进行设置

#创建Display对象
disp = display.Display()

while True:
    #获取摄像头缓冲图片
    img = cam.read()

    #LCD显示摄像头图片
    disp.show(img)

        这样我们就对LCD屏幕进行了简单的配置,让摄像机拍摄的画面显示到了LCD屏幕上。如果你想要对摄像头进行更深入设置,可以接着阅读本章节。

Display中的函数

        接下来的部分,我将介绍一些常用的调整屏幕的函数,如果你需要了解更多,可以阅读Maixpy官网关于API中Display部分的内容。

#关闭屏幕
disp.close()

#设置屏幕背光,范围为[0,100]
disp.set_backlight(100)

#设置屏幕镜像
disp.set_hmirror(True)

#设置屏幕翻转
disp.set_vflip(True)

#如果图片超出,或者小于LCD显示范围你可以改变fit
#fit为图像显示方式,默认为image.FIT_CONTAIN,即保持纵横比,用黑色填充空白
#其余还有以下函数,你可以选择自己想要的显示方式
#FIT_NONE:不匹配对象,保持原始
#FIT_FILL:宽度到新宽度,高度到新高度,可以拉伸
#FIT_COVER:保持纵横比,裁剪图像以适应新尺寸
disp.show(
img: maix.image.Image, 
fit: maix.image.Fit = ...)

总结 

        如果你想要快速配置摄像头内容,只需要使用以下代码就可以了

#导入camera、image和display
from maix import camera, image, display

#对摄像头进行简单配置 宽640 高480 彩图RGB888 60fps
cam = camera.Camera(640, 480, image.Format.FMT_RGB888, fps=60)

#创建Display对象
disp = display.Display()

#跳过开头30fps,等待摄像头稳定
cam.skip_frames(30)

while 1:
    #从相机缓冲区获取一帧图像,返回image对象
    img = cam.read()

    #LCD显示摄像头图片
    disp.show(img)

你可能感兴趣的:(MaixCam,python)