• 多相机一键同步拍摄Python&C++


    效果

    一键拍照效果 (访问密码:2468)
    暂未补充说明,稍后会添加文字说明

    多摄像头一键同步拍摄

    最近有朋友咨询如何实现多摄像头一键同步拍照功能的方案问题,帮着实现了一下,包括Python和C++两个版本,实现思路和大家分享一下~

    功能需求

    1. 在电脑上实现单/多个摄像头(UVC协议)的拍摄和保存照片功能
    2. 多个相机拍摄时能够实现一键同时拍摄保存图像
    3. 当然越便宜越好啦!!!

    具体方案

    以下NumCam表示相机个数

    1. 上位机+下位机

    组成
    上位机:电脑MasterPc+软件(OrderExe负责发布拍摄指令)
    下位机:[相机Cam_i+树莓派Pi_i] * NumCam,树莓派上的接收指令和拍照保存软件PhotoExe

    大致的实现方式

    1. 在局域网下固定MasterPC和每个树莓派的ip,在MasterPC上设置拍摄图片的保存路径(SavePath),将该路径挂载在每个树莓派上
    2. 连接相机和树莓派,在树莓派上运行PhotoExe
    3. 在MasterPC上通过OrderExe发布指令,树莓派执行指令保存图像到挂载的路径
      有的专家说到需要搭建数据库,吓坏我了,一件小小功能复杂化了。大可不必,真要搞得话一些数据同步软件也可以搞定,比如说坚果云,打call!

    特点

    1. 成本,成本,最重要的还是成本!
    2. 太复杂了,当然也得看具体应用环境哈哈

    只有上位机

    组成
    相机+电脑+USB-Hub
    (目前淘宝上卖的Hub最多可以支持20个USB口的扩展)

    实现方式

    1. 相机n个一组连接在hub上,hub连接在电脑上
    2. 电脑上只有一个软件,可以同时打开摄像头,并拍摄保存

    特点

    1. 简单,可以在本地直接看到保存的图像
    2. 便宜,便宜,还是便宜!投入少,摄像头可以先搞两三个测试验证一下,能行就能行,不能行也就可以调整方案,设备可以复用不会浪费!

    推荐及实现细节

    当然是推荐第二种,成本低,即使行不通还可以调整方案为第一种或者其他方案,设备都不会浪费!

    说到实现细节的话:

    1. 用到OpenCV视觉库
    2. 首先实现单相机的打开关闭,图像的显示和保存,这个其实是很简单的,在网上都可以搜索到的,不多赘述
    3. 在2的基础上结合多线程,但是需要注意的是,一键拍摄时需要确保N个相机确实保存了N张图像,不会少保存
    4. 另外如果对拍摄相机的顺序有要求,比如我想打开第3、4、5个相机同步拍摄,但是在程序中OpenCV中无法知道那么多相机中哪几个是编号345的相机,可能打开编号567的相机。所以需要绑定相机的VID和相机的编号,这一点在购买相机时要和店老板沟通好!

    具体效果

    忘了保存一些实现的过程和结果的照片了😂,但是这个功能是保熟的!

    软件下载链接

    这里实现了Python和C++两种,具体:

    Python版

    1. 实现单/多相机的一键拍照功能
    2. 支持多平台,Win/Mac/Linux
    3. 没有实现相机编号和VID的绑定,不过这个绑定在Linux和Mac上实现比较简单
    4. 需要安装有Python,直接通过终端运行
    5. 多相机模式时,需要在代码中修改相机编号来实现

    C++版

    1. 实现单/多相机的一键拍照功能
    2. 暂时支持Win
    3. 实现相机编号和VID的绑定
    4. exe格式,可以直接双击运行
    5. 单/多相机模式中,想要修改相机编号时,无需修改代码,在config.yaml中修改即可

    链接
    或者闲鱼
    在这里插入图片描述
    在这里插入图片描述

    感谢

    实现过程中也参考了很多道友的分享,感谢🙏

    1. HelloWorld博主的分享
    2. babybin博主的分享
    3. 机器鱼博主的分享
  • 相关阅读:
    hashcode和equals方法的区别与联系
    10 创建型模式-原型模式
    SPark学习笔记:10 SparkSQL 数据源之Spark on Hive
    力扣学习计划75题-第一篇
    KubeSphere DevOps流水线部署
    虹科案例 | AR内窥镜手术应用为手术节约45分钟?
    基于java+SpringBoot+HTML+SqlServer游戏饰品交易网站的设计与实现(程序+论文)
    Navicat登录管理MySQL快速入门
    Python 中的 round() 函数:实现精确的数值舍入操作
    【活动回顾】Rust:构建新时代基础设施的首选语言 @Qcon
  • 原文地址:https://blog.csdn.net/qq_31806429/article/details/128165716