多相机一键同步拍摄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中修改即可

链接
或者闲鱼
多相机一键同步拍摄Python&C++_第1张图片
多相机一键同步拍摄Python&C++_第2张图片

感谢

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

  1. HelloWorld博主的分享
  2. babybin博主的分享
  3. 机器鱼博主的分享

你可能感兴趣的:(python,c++,源码软件)