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

本文提供了实现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()  # 捕获并发送图片
            

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()

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值