Maix Bit 系列心得(3)--- 倒着的图像

2021-07-23 16:15:04 浏览数 (1)

前言

打开 MaixPy IDE ,会出现 helloworld_1.py ,有如下代码:

代码语言:javascript复制
# Hello World Example
#
# Welcome to the MaixPy IDE!
# 1. Conenct board to computer
# 2. Select board at the top of MaixPy IDE: `tools->Select Board`
# 3. Click the connect buttion below to connect board
# 4. Click on the green run arrow button below to run the script!

import sensor, image, time, lcd

lcd.init(freq=15000000)
sensor.reset()                      # Reset and initialize the sensor. It will
                                    # run automatically, call sensor.run(0) to stop
sensor.set_pixformat(sensor.RGB565) # Set pixel format to RGB565 (or GRAYSCALE)
sensor.set_framesize(sensor.QVGA)   # Set frame size to QVGA (320x240)
sensor.skip_frames(time = 2000)     # Wait for settings take effect.
clock = time.clock()                # Create a clock object to track the FPS.

while(True):
    clock.tick()                    # Update the FPS clock.
    img = sensor.snapshot()         # Take a picture and return the image.
    lcd.display(img)                # Display on LCD
    print(clock.fps())              # Note: MaixPy's Cam runs about half as fast when connected
                                    # to the IDE. The FPS should increase once disconnected.

运行后在lcd上面显示的图像是倒着的,那么图像为什么是倒着的呢?

一、什么是摄像头?

我们都见过各种摄像头,比如

那么什么是摄像头,说到底,就是一个将光学信号转变成电信号的一个装置。在计算机视觉中,最简单的相机模型是小孔成像模型:

小孔模型是一种理想相机模型,没有考虑实际相机中存在的场曲、畸变等问题。但是在实际使用时,这些问题可以通过在标定的过程中引入畸变参数解决,所以小孔模型仍然是目前最广泛使用的相机模型。

这就是【前言】中图像为什么倒着的答案,小孔成像出来的是倒着的像。

图像透过镜头,照在一个感光芯片上,感光芯片可以把光照的波长和强度等信息转成计算机(数字电路)可以识别的数字信号。也就是在感光芯片上面的图像是倒着的,那么我们正常使用照相机照相时的图像是正着的,这里面存在着相关图像的处理。

二、如何实现图像旋转?

只需加一行代码:

代码语言:javascript复制
img.rotation_corr(x_rotation=180,y_rotation=180)

各个参数含义:

img.rotation_corr() 这个函数可以实现图像旋转,结果加上之后出现如下错误。

串行终端提示:

代码语言:javascript复制
Traceback (most recent call last):
  File "<stdin>", line 23, in <module>
AttributeError: 'Image' object has no attribute 'rotation_corr'
MicroPython v0.5.0-123-g859098d on 2020-08-18; Sipeed_M1 with kendryte-k210
Type "help()" for more information.

新手上路总是会遇到各种问题,于是就开始想办法解决。

于是,试了一下官方文档中的一个 demo:

代码语言:javascript复制
import sensor
import image
import lcd
import time
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)
green_threshold   = (0,   80,  -70,   -10,   -0,   30)
while True:
    img=sensor.snapshot()
    blobs = img.find_blobs([green_threshold])
    if blobs:
        for b in blobs:
            tmp=img.draw_rectangle(b[0:4])
            tmp=img.draw_cross(b[5], b[6])
            c=img.get_pixel(b[5], b[6])
    lcd.display(img)

结果还是出现相同的问题,我想难不成官方文档里面也会有错误?于是开始怀疑是固件存在问题。我把这个 maixpy_v0.5.0_125_gd4bdb25.bin 固件下载到 Maix Bit ,然后运行代码就没问题了。

三、问题之源

看了我之前下载的固件:maixpy_v0.5.0_123_g859098d_minimum.bin

然而出厂默认的是: maixpy_v0.5.0_125_gd4bdb25.bin

所以,官方文档教程中的更新 MaixPy 固件就可以略过了,以免下错了固件。

MaixPy 文档中固件命名说明:

文件名

说明

备注

maixpy_vx.y.z_x_xxx*.bin

默认版本的 MaixPy 固件,包含了大多数功能, 支持连接 MaixPy IDE,

出厂默认固件版本

maixpy_vx.y.z_x_xxx*_m5stickv.bin

针对 M5Stickv 定制的固件, 支持连接 MaixPy IDE

maixpy_vx.y.z_x_xxx*_with_lvgl.bin

MaixPy 固件, 支持连接 MaixPy IDE, 带 LVGL 版本.(LVGL是嵌入式 GUI 框架, 写界面的时候需要用到)

maixpy_vx.y.z_x_xxx*_minimum.bin

MaixPy 固件最小集合,不支持 MaixPy IDE, 不包含OpenMV的相关算法和各种外设模块

maixpy_vx.y.z_x_xxx*_minimum_with_ide_support.bin

MaixPy 固件最小集合, 支持连接 MaixPy IDE, 不包含OpenMV的相关算法和各种外设模块

运行各种模型,建议使用这个

elf_maixpy_vx.y.z_x_xxx*.7z

elf 文件,普通用户不用关心,用于死机调试

face_model_at_0x300000.kfpkg

人脸模型,放置在地址位 0x300000, 可以和.bin分开多次下载,不冲突

下载表格中的第一个固件就可以了

之前还下载了一个固件:maixpy_v0.5.0_123_g859098d_minimum_with_ide_support.bin 发现这个下进去直接就连接不上了。

所以,如果你在使用某个功能时, 发现提示错误,找不到库,可能是你使用了不包含这个功能的固件,比如 minimum 固件不包含 IDE 和 image.find_blobs 功能, 如果烧录了这个固件, 再去连接 IDE 就会连接失败, 使用 iamge.find_blobs 这个函数也会提示找不到函数定义

四、方法改进

使用

代码语言:javascript复制
img.rotation_corr(x_rotation=180,y_rotation=180)

发现帧率变低

▲ 帧率低

改用

代码语言:javascript复制
sensor.set_vflip(1)                 # flip the sensor

▲ 帧率正常

总结

  • 摄像头感光芯片上的像是倒着的,要得到正的像要做相关处理
  • img.rotation_corr() 图像旋转;sensor.set_vflip(1) 摄像头翻转
  • 图像翻转处理后,帧率变低了,差不多是原来的一半

参考文献

[1]:MaixPy 文档 [2]:https://cn.bbs.sipeed.com/d/448-k210

0 人点赞