大恒相机开发(1)—Python调用采集彩色图像并另存为本地

ops/2024/12/25 3:27:51/

这段代码是一个Python程序,用于从大恒相机采集彩色图像,并将其保存到本地。

前面需要自己修改下频率和采集的次数

  • framerate_set:设置相机的帧率。
  • num:设置采集图像的次数。

在这里插入图片描述

咱们直接上python的完整代码:

python">import cv2
import gxipy as gx
from PIL import Image
import datetimedef main():Width_set = 2448  # 设置分辨率宽   360Height_set = 2048  # 设置分辨率高  480framerate_set = 1.4  # 设置帧率     #r=400rnum = 4000  # 采集帧率次数(为调试用,可把后边的图像采集设置成while循环,进行无限制循环采集)# 打印# print("")# print("###############################################################")# print("               连续获取彩色图像并显示获取的图像.")# print("###############################################################")# print("")# print("摄像机初始化......")# print("")# 创建设备device_manager = gx.DeviceManager()  # 创建设备对象dev_num, dev_info_list = device_manager.update_device_list()  # 枚举设备,即枚举所有可用的设备if dev_num is 0:print("Number of enumerated devices is 0")returnelse:# print("")# print("**********************************************************")print("创建设备成功,设备号为:%d" % dev_num)# 通过设备序列号打开一个设备cam = device_manager.open_device_by_sn(dev_info_list[0].get("sn"))# 如果是黑白相机if cam.PixelColorFilter.is_implemented() is False:  # is_implemented判断枚举型属性参数是否已实现print("该示例不支持黑白相机.")cam.close_device()returnelse:print("")print("**********************************************************")print("打开彩色摄像机成功,SN号为:%s" % dev_info_list[0].get("sn"))# 设置宽和高cam.Width.set(Width_set)cam.Height.set(Height_set)# 设置连续采集# cam.TriggerMode.set(gx.GxSwitchEntry.OFF) # 设置触发模式cam.AcquisitionFrameRateMode.set(gx.GxSwitchEntry.ON)# 设置帧率cam.AcquisitionFrameRate.set(framerate_set)print("")# print("**********************************************************")# print("用户设置的帧率为:%d fps" % framerate_set)framerate_get = cam.CurrentAcquisitionFrameRate.get()  # 获取当前采集的帧率print("当前采集的帧率为:%d fps" % framerate_get)# 开始数据采集# print("")# print("**********************************************************")# print("开始数据采集......")# print("")cam.stream_on()# 采集图像for i in range(num):raw_image = cam.data_stream[0].get_image()  # 打开第0通道数据流if raw_image is None:print("获取彩色原始图像失败.")continuergb_image = raw_image.convert("RGB")  # 从彩色原始图像获取RGB图像if rgb_image is None:continue# rgb_image.image_improvement(color_correction_param, contrast_lut, gamma_lut)  # 实现图像增强numpy_image = rgb_image.get_numpy_array()  # 从RGB图像数据创建numpy数组if numpy_image is None:continueimg = Image.fromarray(numpy_image, 'RGB')  # 展示获取的图像# img.show()mtime = datetime.datetime.now().strftime('%Y-%m-%d_%H_%M_%S')img.save(r"D:\pytorch\waibujiance\photo13\\" + str(i) + str("-") + mtime + ".jpg")  # 保存图片到本地print("Frame ID: %d   Height: %d   Width: %d   framerate_set:%dfps   framerate_get:%dfps"% (raw_image.get_frame_id(), raw_image.get_height(), raw_image.get_width(), framerate_set,framerate_get))  # 打印采集的图像的高度、宽度、帧ID、用户设置的帧率、当前采集到的帧率# 停止采集# print("")# print("**********************************************************")# print("摄像机已经停止采集")cam.stream_off()# 关闭设备# print("")# print("**********************************************************")print("系统提示您:设备已经关闭!")cam.close_device()if __name__ == "__main__":main()

下面是代码的详细解读和功能说明:

  1. 导入必要的库

    • cv2:OpenCV库,用于图像处理。
    • gxipy:大恒相机的SDK,用于控制相机。
    • PIL(Python Imaging Library):用于图像处理,这里用于将numpy数组转换为图像。
    • datetime:用于获取当前时间,以便在保存图片时添加时间戳。
  2. 定义main函数:这是程序的主函数,所有操作都在这个函数中执行。

  3. 设置相机参数

    • Width_setHeight_set:分别设置相机的分辨率宽度和高度。
    • framerate_set:设置相机的帧率。
    • num:设置采集图像的帧数。
  4. 创建设备对象

    • device_manager = gx.DeviceManager():创建一个设备管理对象。
    • dev_num, dev_info_list = device_manager.update_device_list():枚举所有可用的设备,并获取设备列表。
  5. 检查设备数量

    • 如果没有设备,打印信息并退出程序。
  6. 打开设备

    • 通过设备序列号打开一个设备。
  7. 检查相机类型

    • 如果相机不支持彩色图像,打印信息并关闭设备。
  8. 设置相机参数

    • cam.Width.set(Width_set)cam.Height.set(Height_set):设置相机的宽度和高度。
    • cam.AcquisitionFrameRateMode.set(gx.GxSwitchEntry.ON):设置为连续采集模式。
    • cam.AcquisitionFrameRate.set(framerate_set):设置帧率。
  9. 获取当前帧率

    • framerate_get = cam.CurrentAcquisitionFrameRate.get():获取当前采集的帧率,并打印。
  10. 开始数据采集

    • cam.stream_on():开启数据流。
  11. 采集图像

    • 循环num次,每次从相机获取一幅图像。
    • raw_image = cam.data_stream[0].get_image():从第0通道获取原始图像。
    • rgb_image = raw_image.convert("RGB"):将原始图像转换为RGB格式。
    • numpy_image = rgb_image.get_numpy_array():将RGB图像转换为numpy数组。
    • img = Image.fromarray(numpy_image, 'RGB'):将numpy数组转换为PIL图像对象。
    • img.save():保存图像到指定路径,并添加时间戳。
  12. 打印采集信息

    • 打印每帧图像的ID、高度、宽度、设置的帧率和当前帧率。
  13. 停止采集和关闭设备

    • cam.stream_off():停止数据流。
    • cam.close_device():关闭设备。
  14. 程序入口

    • if __name__ == "__main__"::确保当脚本被直接运行时,才执行main函数。

这个程序的主要功能是初始化大恒相机,设置分辨率、帧率等参数,然后连续采集指定数量的图像,并将每幅图像保存到本地。程序还打印了采集过程中的一些信息,如帧ID和帧率。


http://www.ppmy.cn/ops/144737.html

相关文章

好家伙!仅需1行Python,腾讯云智能OCR让手写发票识别效率飙升!

​ 大家好,这里是程序员晚枫,今天给大家带来一个腾讯云的新功能:智能结构化识别(Pro版)。 智能结构化(Smart Structure Optical Character Recognition )融合了业界领先的深度学习技术、图像检…

重温设计模式--组合模式

文章目录 1 、组合模式(Composite Pattern)概述2. 组合模式的结构3. C 代码示例4. C示例代码25 .应用场景 1 、组合模式(Composite Pattern)概述 定义:组合模式是一种结构型设计模式,它允许你将对象组合成…

mysql 查询优化之字段建立全文索引

最近在接手一些老项目时发现表设计存在问题导致查询较慢 例如一张旧表的设计: 模糊匹配某个关键字时,需要十几秒左右,而且表的数据量不多 都知道mysql8.0版本InnoDB引擎都支持全文索引了,因此可以在content建立全文索引,但全文索引对中文支持并不完善…

设计模式--工厂方法模式【创建型模式】

设计模式的分类 我们都知道有 23 种设计模式,这 23 种设计模式可分为如下三类: 创建型模式(5 种):单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。结构型模式(7 种)&#xff1…

Windows下ESP32-IDF开发环境搭建

Windows下ESP32-IDF开发环境搭建 文章目录 Windows下ESP32-IDF开发环境搭建一、软件安装二、搭建IDF开发环境2.1 安装VS Code插件:2.2 配置ESP-IDF插件:2.3 下载例程源码: 三、编译和烧录代码四、Windows下使用命令行编译和烧录程序4.1 配置环…

Docker安装

目录 1. 联网安装 Docker 2. 离线安装 Docker 3. 安装 Docker Compose 4. 卸载 Docker 和 Docker Compose 1. 联网安装 Docker 在 CentOS 上通过 yum 安装 Docker: # 安装 Docker yum -y install docker # 启动 Docker systemctl start docker # 查看 D…

2024-12-24 NO1. XR Interaction ToolKit 环境配置

文章目录 1 软件配置2 安装 XRToolKit3 配置 OpenXR4 安装示例场景5 运行测试 1 软件配置 Unity 版本:Unity6000.0.26 ​ 2 安装 XRToolKit 创建新项目(URP 3D),点击进入 Asset Store。 进入“Unity Registry”页签&#xff0…

通过Hydra 配置文件实例化Lightning类

通过 Hydra 的配置文件灵活控制 LightningModule、LightningDataModule、Callback 和 Trainer 的实例化过程。 Lightning 与 Hydra 的结合 1. 配置文件结构 一个典型的配置文件目录可能如下: configs/ ├── callbacks/ │ ├── early_stopping.yaml │ ├── che…