当前位置:   article > 正文

OpenMV采集图片通过串口发送,PC接收并保存为图片_openmv保存图片

openmv保存图片

本文提供了实现OpenMV串口发送图片,PC接收并保存的代码,全部使用python编程,已验证通过。

  • openmv串口 UART3(P4–>TX | P5–>RX)
  • 串口波特率 921600(也可以是其它波特率,更高的波特率尚未验证)
  • 使用一个USB转串口模块进行连接即可

程序运行流程为:

  1. 运行PC端代码,电脑等待串口接收图片数据
  2. 运行openmv代码,openmv使用snapshot方法采集一张图片,进行压缩并发送
  3. 电脑收到图片数据,解码为一张图片,并保存为jpg格式,发送#表示完成
  4. openmv接收到#后停止发送图像

OpenMV 代码

import sensor
import image
import ustruct
import pyb
from pyb import Pin

# 初始化相机
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.VGA)  # 分辨率可以修改为QQVGA、QVGA等
sensor.skip_frames(time=500)

# 初始化串口
uart = pyb.UART(3, 921600)  # 选择合适的串口号和波特率

# 初始化I/O
p_in = Pin('P9', Pin.IN, Pin.PULL_UP)#设置p_in为输入引脚,并开启上拉电阻
# value = p_in.value() # get value, 0 or 1#读入p_in引脚的值

# 捕获并发送图像
def capture_and_send_image():
    # 捕获图像
    img = sensor.snapshot()

    # 将图像转换为JPEG格式
    img_compressed = img.compress(quality=50)  #质量可以修改为 10 ~ 90

    # 计算图像大小
    size = ustruct.pack("<L", len(img_compressed))

    # 发送图像大小和数据
    uart.write(size)
    uart.write(img_compressed)

    # 等待接收到确认信号
    while uart.any() == 0:
        pass

    # 接收确认信号
    confirmation = uart.read(1)

    # 如果接收到的确认信号为 "#"
    if confirmation == b'#':
        # 停止发送图像
        while uart.any():
            uart.readchar()

        # 发送停止信号 "#"
        uart.write(b'#')

# 主循环
while True:
	capture_and_send_image()  # 捕获并发送图片
            
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

PC端代码

import serial
import struct

# 打开串口
ser = serial.Serial('COM1', 921600)  # 将 COM1 替换为你的串口号和相应的波特率

# 接收图像并保存
def receive_and_save_image(output_path):
    # 读取图像大小
    size_data = ser.read(4)
    size = struct.unpack("<L", size_data)[0]

    # 读取图像数据
    image_data = ser.read(size)

    # 保存图像
    with open(output_path, 'wb') as file:
        file.write(image_data)

    # 发送确认信号 "#"
    ser.write(b'#')

    # 接收停止信号
    stop_signal = ser.read(1)
    if stop_signal == b'#':
        return True
    else:
        return False

# 图像保存路径
output_image_path = 'received_image.jpg'

# 循环接收并保存图像
while True:
    if receive_and_save_image(output_image_path):
        break

# 关闭串口
ser.close()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/474111
推荐阅读
相关标签
  

闽ICP备14008679号