首页 > 其他分享 >openmv持续拍摄照片串口发送至电脑,电脑持续打开窗口显示照片

openmv持续拍摄照片串口发送至电脑,电脑持续打开窗口显示照片

时间:2024-11-19 15:44:02浏览次数:3  
标签:img self 电脑 照片 串口 sensor image def openmv

程序运行流程为:

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

OPENMV端

import sensor, image, time, ustruct, pyb

def init_camera():
    sensor.reset()
    sensor.set_pixformat(sensor.JPEG)  # 直接设置为JPEG格式,减少压缩步骤
    sensor.set_framesize(sensor.QVGA)
    sensor.skip_frames(time=2000)

def send_image_via_uart(uart, img):
#    img_bytes = img.getbytes()
    length = len(img)
    uart.write(ustruct.pack("<I", length))  # 发送长度
    uart.write(img)  # 发送图片数据

def main():
    uart = pyb.UART(3, baudrate=921600, timeout=1000)
    init_camera()
    
    while True:
        img = sensor.snapshot()
        send_image_via_uart(uart, img)
        print("图片已发送")
        time.sleep(1)  # 添加延时,避免过快发送

if __name__ == "__main__":
    main()

PC端

import serial, struct, tkinter as tk, PIL.Image, PIL.ImageTk, io, threading

class ImageReceiver(threading.Thread):
    def __init__(self, serial_port):
        threading.Thread.__init__(self)
        self.ser = serial.Serial(serial_port, 921600, timeout=1)
        self.root = tk.Tk()
        self.root.title("接收并显示OpenMV图片")
        self.image_label = tk.Label(self.root)
        self.image_label.pack()
        self.running = True

    def run(self):
        while self.running:
            self.receive_image()

    def receive_image(self):
        try:
            # 读取图片长度
            length_bytes = self.ser.read(4)
            if len(length_bytes) != 4:
                print("长度信息接收错误")
                return
            img_length = struct.unpack("<I", length_bytes)[0]
            
            # 读取图片数据
            img_bytes = bytearray()
            while len(img_bytes) < img_length:
                chunk = self.ser.read(min(img_length - len(img_bytes), 1024))
                if not chunk:
                    break
                img_bytes.extend(chunk)
            
            if len(img_bytes) != img_length:
                print("图片数据接收不完整")
                return
            
            # 显示图片
            self.display_image(img_bytes)
        except Exception as e:
            print(f"接收图片时发生错误: {e}")

    def display_image(self, img_bytes):
        try:
            img = PIL.Image.open(io.BytesIO(img_bytes))
            tk_img = PIL.ImageTk.PhotoImage(img)
            self.image_label.config(image=tk_img)
            self.image_label.image = tk_img  # 保持引用
        except Exception as e:
            print(f"显示图片时发生错误: {e}")

    def stop(self):
        self.running = False
        self.ser.close()
        self.root.quit()

if __name__ == "__main__":
    receiver = ImageReceiver('COM23')  # 根据你的串口名修改
    receiver.start()
    receiver.root.mainloop()
    receiver.stop()

标签:img,self,电脑,照片,串口,sensor,image,def,openmv
From: https://blog.csdn.net/2301_80317247/article/details/143844067

相关文章

  • arduino中使用serial chart查看串口数据图性
    参考文章:串口波形显示软件SerialChart的使用-CSDN博客下载地址:SerialChart–StarlinoElectronicsarduino代码如下//定义LED引脚,这里假设是13号引脚constintledPin=13;voidsetup(){//初始化LED引脚为输出模式pinMode(ledPin,OUTPUT);//初始化串口通......
  • Windows电脑四大效率工具:轻松提升办公效率
    一、EV录屏:功能强大的录屏神器在电脑上录屏用它非常简单,可以选择全屏录制或者区域录制,可以选择是否录音,还有图片水印、文字水印、分屏录制,桌面画板等工具。此外还可以进行简单的视频剪辑、合并等。对于需要进行电脑录屏的打工人来说,简单又好用!二、敬业签:好用的手机、电脑云同......
  • 橙啦视频课件课程下载工具,如何在电脑端下载橙啦视频课程课件资料PDF,PPT到本地?
    一.安装橙啦课程下载器1.获取学无止下载器https://www.xuewuzhi.cn/orangevip_downloader2.下载安装后,然后点击桌面快捷方式运行即可。注意:杀毒软件可能会阻止外部exe文件运行,并将其当做成病毒,直接添加信任即可,本软件绝对没有木马病毒。二.使用说明1.学无止下载器介绍学......
  • 51单片机关于超声波测距(可用串口助手显示距离)
    *************************************************************************************声明:我使用的单片机的型号是stc89c51rc,大家请根据自己的实际情况来配置****************************************************************************************************......
  • python 获取计算机电脑的配置信息
    获取电脑操作系统、CPU、内存、磁盘等信息。pipinstallplatformpipinstallpsutil通过使用platform库获取基本的操作系统和处理器信息,并使用psutil库检索更多详细的系统资源状态,如CPU频率、内存状态和磁盘使用情况。调用get_computer_config()自定义函数将返回一个包含全......
  • 打工人提效必备!4款好用的Win电脑效率工具
    今天来给大家分享4款我换了5台电脑都一定会安装的效率神器软件,每一款都能让你的办公、学习效率大幅提升!1、Everything这是一款文件搜索神器!相信大家都有过在电脑里找文件找得焦头烂额的经历吧?Everything就能完美解决这个问题。它的搜索速度超快,几乎是秒出结果。无论你的电......
  • 百度网盘文件手机和电脑如何保存、下载、打印、发送给好友?
    原文持续更新中:https://www.cnblogs.com/MrFlySand/p/18552343教程一:手机保存网盘文件并下载教程介绍:通过别人发送的链接,用手机将别人的资源保存到自己的网盘中,随时根据自己的需求下载文件,对文件进行查看、编辑、打印等操作。操作教程如下:将链接发送到微信/QQ中,并点击链接。......
  • 什么是SMARC?模块电脑(核心板)规范标准简介三
    1. 概念SMARC(Smart Mobility ARChitecture,智能移动架构)是一种通用的小型计算机模块定义,基于ARM和X86技术的模块化计算机低功耗嵌入式架构平台,旨在满足低功耗、低成本和高性能的应用需求。这些模块通常使用与平板电脑和智能手机中相似的ARM SOC,或其他低功耗SOC和CPU。  图......
  • 伯索云学堂视频课件课程下载工具,如何在电脑端下载伯索云学堂视频课程课件资料PDF,PPT
    一.安装伯索云课程下载器1.获取学无止下载器https://www.xuewuzhi.cn/plaso_downloader2.下载安装后,然后点击桌面快捷方式运行即可。注意:杀毒软件可能会阻止外部exe文件运行,并将其当做成病毒,直接添加信任即可,本软件绝对没有木马病毒。二.使用说明1.学无止下载器介绍学无......
  • 如何从 Android 图库中恢复误删除的照片
    如果您正在阅读这篇文章,那么您肯定意外地从Android设备中删除了照片。并且您正在寻找一种简单的方法来恢复Android图库中已删除的照片。从图库恢复已删除的照片随着技术的进步,现在使用单个设备(即Android手机),您就可以捕捉图像、根据需要编辑图像、高效管理图像、存储图......