猪百岁 发表于 2021-3-21 10:57:29

【新手基础教程】基本图像处理:图像获取和...

本帖最后由 猪百岁 于 2021-3-22 10:37 编辑

# 基本图像处理:图像获取和显示

## 获得图像

可以从摄像头获得图像,也可以从文件系统读取图片文件, 也可以从网络获取图片

### 1. 从摄像头获取

```
import sensor, lcd

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)
sensor.skip_frames()

img = sensor.snapshot()
print(img)
```

+ import sensor: 首先导入内置的sensor(摄像头)库
+ sensor.reset(): 初始化摄像头,这里失败需要检查硬件
+ sensor.set_pixformat(sensor.RGB565): 设置摄像头为RGB565格式,默认都是用RGB565即可
+ sensor.set_framesize(sensor.QVGA): 分辨率为QVGA,即320x240
+ sensor.run(1): 开始运行,在现在的版本中也可以不调用,在上面设置完成后,摄像头会自动开始运行
+ sensor.skip_frames(): 摄像头刚启动时,图像质量还没稳定,所以跳过一些图像
+ sensor.snapshot():从摄像头取一帧图像数据,返回值是一张图像的对象

除了以上的函数, 你可能还需要设置图像为镜像(hmirror),比如前置摄像头; 或者上下翻转(vflip), 以及白平衡等等, 具体看 (https://cn.maixpy.sipeed.com/zh/api_reference/machine_vision/sensor.html)

### 2. 从文件读取

```
import image

img = image.Image("/sd/test.jpg")
print(img)
```

当然你也可以把图片保存到文件系统`

```
img.save("/sd/test2.jpg", quality=95)
```

### 3. 从内存读取(或者网络读取)

可以先将文件读取到内存, 具体是从哪里读取的看你的应用了, 比如网络,或者串口 SPI 等等, 构造一个 bytes对象

```
import image

jpeg_buff = b'\xFF'   # jpeg buffer
img = image.Image(jpeg_buff, from_bytes = True)
print(img)
```

**(3的例程不能直接跑,会提示格式错误。因为b'0xff'并非图片,需要现将图片存入jpeg_buff后,才可运行此例程。)**

### 4. 直接创建一个空白图像

```
import image

img = image.Image(size=(320, 240))
```

这张图片是全黑的空白图像

## 显示图片

显示图片很简单, 直接使用 lcd 模块,调用函数进行显示即可, 如下:

```
import lcd, image

lcd.init()

img = image.Image("/sd/test.jpg")
lcd.display(img)
```

但是不同的屏幕初始化序列可能不一样, 在lcd.init的时候有很多可选参数, 具体看 API 文档的描述,常见的如下

对于 IPS 屏幕,需要反色:

```
lcd.init(type=2)
```

对于屏幕体质不是很好, 需要降低频率,或者体质很好需要超频:

```
lcd.init(freq = 15000000)
```

另外, 也可是设置屏幕的旋转方向:

```
lcd.rotation(2)
```

参数是0~3, 分别代表顺时针旋转 0度 90度 180度 270度

更多方法, 请参考 (https://cn.maixpy.sipeed.com/zh/api_reference/machine_vision/lcd.html)

猪百岁 发表于 2021-3-22 10:35:45

好的,谢谢大佬的提醒{:7_216:}
页: [1]
查看完整版本: 【新手基础教程】基本图像处理:图像获取和...