大恒相机开发(2)—Python软触发调用采集图像

大恒相机开发(2)—Python软触发调用采集图像

    • 完整代码
    • 详细解读和功能说明
    • 扩展学习

这段代码是一个Python程序,用于从大恒相机采集图像,通过软件触发来采集图像。
在这里插入图片描述

完整代码

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

# version:1.0.1905.9071
import gxipy as gx
import time
from PIL import Imagedef acq_color(device, num):""":brief      acquisition function of color device:param      device:     device object[Device]:param      num:        number of acquisition images[int]"""for i in range(num):time.sleep(0.1)# send software trigger commanddevice.TriggerSoftware.send_command()# get raw imageraw_image = device.data_stream[0].get_image()if raw_image is None:print("Getting image failed.")continue# get RGB image from raw imagergb_image = raw_image.convert("RGB")if rgb_image is None:continue# create numpy array with data from raw imagenumpy_image = rgb_image.get_numpy_array()if numpy_image is None:continue# show acquired imageimg = Image.fromarray(numpy_image, 'RGB')img.show()# print height, width, and frame ID of the acquisition imageprint("Frame ID: %d   Height: %d   Width: %d"% (raw_image.get_frame_id(), raw_image.get_height(), raw_image.get_width()))def acq_mono(device, num):""":brief      acquisition function of mono device:param      device:     device object[Device]:param      num:        number of acquisition images[int]"""for i in range(num):time.sleep(0.1)# send software trigger commanddevice.TriggerSoftware.send_command()# get raw imageraw_image = device.data_stream[0].get_image()if raw_image is None:print("Getting image failed.")continue# create numpy array with data from raw imagenumpy_image = raw_image.get_numpy_array()if numpy_image is None:continue# show acquired imageimg = Image.fromarray(numpy_image, 'L')img.show()# print height, width, and frame ID of the acquisition imageprint("Frame ID: %d   Height: %d   Width: %d"% (raw_image.get_frame_id(), raw_image.get_height(), raw_image.get_width()))def main():# print the demo informationprint("")print("-------------------------------------------------------------")print("Sample to show how to acquire mono or color image by soft trigger ""and show acquired image.")print("-------------------------------------------------------------")print("")print("Initializing......")print("")# create a device managerdevice_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")return# open the first devicecam = device_manager.open_device_by_index(1)# set exposurecam.ExposureTime.set(10000)# set gaincam.Gain.set(10.0)if dev_info_list[0].get("device_class") == gx.GxDeviceClassList.USB2:# set trigger modecam.TriggerMode.set(gx.GxSwitchEntry.ON)else:# set trigger mode and trigger sourcecam.TriggerMode.set(gx.GxSwitchEntry.ON)cam.TriggerSource.set(gx.GxTriggerSourceEntry.SOFTWARE)# start data acquisitioncam.stream_on()# camera is color cameraif cam.PixelColorFilter.is_implemented() is True:acq_color(cam, 1)# camera is mono cameraelse:acq_mono(cam, 1)# stop acquisitioncam.stream_off()# close devicecam.close_device()if __name__ == "__main__":main()

详细解读和功能说明

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

  1. 导入必要的库

    • gxipy:大恒相机的SDK,用于控制相机。
    • time:用于在采集图像之间添加延迟。
    • PIL(Python Imaging Library):用于图像处理,这里用于显示图像。
  2. 定义采集函数

    • acq_color(device, num):用于彩色相机的采集函数。
    • acq_mono(device, num):用于单色相机的采集函数。
  3. 采集函数的共同步骤

    • 循环num次,每次采集一幅图像。
    • time.sleep(0.1):在每次采集之间添加0.1秒的延迟。
    • device.TriggerSoftware.send_command():发送软件触发命令,告诉相机现在可以采集图像。
    • raw_image = device.data_stream[0].get_image():从相机的第一个数据流中获取原始图像。
    • 如果raw_imageNone,则打印错误信息并继续下一次循环。
    • 对于彩色相机,rgb_image = raw_image.convert("RGB"):将原始图像转换为RGB格式。
    • 对于单色相机,直接使用raw_image
    • numpy_image = rgb_image.get_numpy_array()numpy_image = raw_image.get_numpy_array():将图像数据转换为numpy数组。
    • 如果numpy_imageNone,则跳过当前循环。
    • img = Image.fromarray(numpy_image, 'RGB')img = Image.fromarray(numpy_image, 'L'):将numpy数组转换为PIL图像对象,'RGB’用于彩色图像,'L’用于单色图像。
    • img.show():显示采集到的图像。
    • 打印采集图像的帧ID、高度和宽度。
  4. 定义main函数

    • 打印程序信息和初始化步骤。
    • 创建设备管理对象device_manager
    • 枚举设备并检查是否有设备连接。
    • 打开第一个设备cam
    • 设置曝光时间cam.ExposureTime.set(10000)和增益cam.Gain.set(10.0)
    • 根据设备类型设置触发模式,对于USB2设备,只设置触发模式为开启;对于其他设备,还需要设置触发源为软件触发。
    • 开始数据采集cam.stream_on()
    • 检查相机是否为彩色相机,并调用相应的采集函数。
    • 停止数据采集cam.stream_off()
    • 关闭设备cam.close_device()
  5. 程序入口

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

这个程序的主要功能是初始化大恒相机,设置曝光时间和增益,然后通过软件触发采集一幅图像,并显示采集到的图像。程序还根据相机的类型(彩色或单色)调用不同的采集函数。最后,程序停止数据采集并关闭相机设备。
的一些信息,如帧ID和帧率。

扩展学习

使用大恒相机进行图像采集时,以下是一些性能优化技巧:

  1. 合理设置相机参数

    • 根据应用需求合理设置分辨率、曝光时间、增益等参数,以达到最佳的图像质量和采集速度。
  2. 使用软件触发

    • 通过软件触发来控制图像采集,可以更精确地控制采集时机,减少不必要的图像数据。
  3. 图像格式转换和预处理

    • 利用大恒相机SDK提供的功能,对图像进行格式转换(如Bayer转RGB)和预处理(如红蓝转换、垂直镜像等),以减少后续处理的负担。
  4. 利用回调采集提高效率

    • 使用回调采集方式,当图像就绪时自动触发处理,这样可以避免轮询检查图像是否就绪的开销,提高采集效率。
  5. 图像增强功能

    • 通过图像增强功能,如坏点校正、锐化、对比度、亮度调节等,可以在采集阶段就优化图像质量,减少后续处理的复杂度。
  6. 流对象属性控制

    • 通过流对象控制相机采集相关的属性和统计信息,可以更精细地管理采集过程,提高性能。
  7. 多相机采集稳定性

    • 对于多相机系统,使用支持多路I/O输入/输出信号和丰富图像预处理功能的图像采集卡,可以提高多相机采集的稳定性和效率。
  8. 使用高速接口

    • 如果相机支持,使用高速接口如CoaXPress或千兆网接口,可以显著提高数据传输速度,减少传输延迟。
  9. 优化代码逻辑

    • 在图像采集的代码中,避免不必要的图像复制和转换操作,直接在相机端进行必要的处理,可以减少CPU占用率,提高整体性能。
  10. 合理管理资源

    • 及时释放不再使用的资源,如关闭数据流、注销事件回调等,可以避免资源泄露,保持系统的稳定性和性能。

通过上述技巧,可以有效地提升大恒相机在图像采集过程中的性能和效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/65010.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM(Spring + Spring MVC + MyBatis)框架构建一个图书馆仓储管理系统

基于SSM(Spring Spring MVC MyBatis)框架构建一个图书馆仓储管理系统是一个涉及多个功能模块的项目,包括但不限于图书管理、读者管理、借阅管理、归还管理等。 1. 环境准备 确保你已经安装了以下工具和环境: Java Developmen…

WebDavClient 安装和配置指南

WebDavClient 安装和配置指南 WebDavClient Asynchronous cross-platform WebDAV client for .NET Core [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/we/WebDavClient 1. 项目基础介绍和主要编程语言 WebDavClient 是一个异步的跨平台 WebDAV 客户端&#xf…

记一次某企业管理系统通用SQL注入挖掘

更多视频教程可看主页和专栏 目录: 一、资产发现 二、通用漏洞挖掘 三、通用漏洞经验总结 一、资产发现 通过漏洞挖掘过程中发现该系统存在sql注入 1.二话不说先来个单引号显示 ‘011111111111111’’) ) 再来一个单号试一试可不可以把他闭合掉 换成报错注入的poc 发现右边…

Mybatis 如何复用 SQL

比如你的Mapper是这样写的: 但这个接口是没有分页的,你还想再写一个有分页的查询接口,两个接口SQL一模一样,只是多了分页特性。你可以直接重载一个方法,增加分页参数,即可复用该SQL。如下:

python ai框架

Python是AI和机器学习领域最常用的编程语言之一,拥有大量的工具和库,下面是一些常见的Python AI工具,它们涵盖了从数据处理到模型训练、评估和部署的各个方面: 1. 机器学习与深度学习框架 TensorFlow:由Google开发的开…

Autosar入门_OS_2

上一篇 | 返回主目录 | 下一篇 OS调度机制 1 基本概念2 Tasks2.1 调度方式2.1.1 完全抢占式调度2.1.2 非抢占式调度2.1.3 混合抢占式调度2.2 激活方式2.2.1 系统定时2.2.2 调度表2.3 执行逻辑及分类2.4 任务堆栈2.5 任务基本属性3 Event4 ISRs1 基本概念 首先,明确三个基本概…

Redis 介绍和安装

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Redis 入门介绍 收录于专栏[redis] 本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨论💌 本章将带领读者进入 Redis 的世…

我的性能优化经验

专业方向:App cpu/memory/gpu/流畅度/响应时间的优化,Anr,Framework CarPowerManagementService模块的(STR),从0~1完成性能监控体系搭建,完成3大版本迭代高质量性能交付 响应时间: …

快速解决VRay渲染慢问题

在3D设计与渲染领域,VRay渲染器无疑是一款强大且广泛使用的工具,但很多小伙伴在使用它进行 CPU 渲染时,都遇到过速度慢得让人抓狂的情况。今天,我就来给大家分享两套切实可行的解决方案。 当我们将 VRay渲染器与 DMAX或Maya搭配使…

C++ 23版的最新特性

C 23 是 C 编程语言的最新标准版本,于 2023 年正式发布,带来了诸多新特性与改进,以下是一些主要内容: 1.语言特性 1.显式对象参数(Deducing this):显式对象参数(Deducing this&…

《庐山派从入门到...》PWM板载蜂鸣器

《庐山派从入门到...》PWM板载蜂鸣器 配置PWM模块控制板载无源蜂鸣器播放【一闪一闪亮晶晶】播放do re mi 《庐山派从入门到...》PWM控制无源蜂鸣器 PWM(Pulse Width Modulation,脉宽调制)是一种在嵌入式系统中常用的技术,它可以用…

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…

ChatGPT生成接口测试用例(一)

用ChatGPT做软件测试 接口测试在软件开发生命周期中扮演着至关重要的角色,有助于验证不同模块之间的交互是否正确。若协议消息被恶意修改,系统是否能够恰当处理,以确保系统的功能正常运行,不会出现宕机或者安全问题。 5.1 ChatGP…

安卓15预置第三方apk时签名报错问题解决

有同事反馈集成apk时安装失败 PackageManager: Failed to scan /product/app/test: No APK Signature Scheme v2 signature in package /product/app/test/test.apk 查看编译后的apk签名信息 DOES NOT VERIFY ERROR: JAR signer CERT.RSA: JAR signature META-INF/CERT.SF indi…

SWIFT基本使用

安装 # 全量能力 pip install ms-swift[all] -U # 仅使用LLM pip install ms-swift[llm] -U # 仅使用AIGC pip install ms-swift[aigc] -U # 仅使用Adapters pip install ms-swift -U or git clone https://github.com/modelscope/ms-swift.git cd ms-swift pip install -e …

YOLOV8涨点技巧(源码)

YOLOV8涨点技巧之替换骨干网络(需要源码请私信或评论) 模型架构 YOLOv8模型架构包含 输入端、骨干网络(Backbone)、颈部(Neck)和预测头(Prediction) 。其中: 输入端负责处理图像并调整尺寸 Backbone提取多层次特征 Neck整合这些特征 Prediction模块进行最终预测。 这种设计…

【C语言】指针数组、数组指针、函数指针、指针函数、函数指针数组、回调函数

【C语言】函数指针与指针函数 文章目录 [TOC](文章目录) 前言一、指针数组二、数组指针三、函数指针四、指针函数五、函数指针数组六、回调函数七、参考资料总结 前言 使用工具: 1.DEVC 提示:以下是本篇文章正文内容,下面案例可供参考 一、…

【04-数据库面试】

如何创建一个新的数据库 数据库是现代信息技术中不可或缺的一部分,它为存储、检索和管理数据提供了强大的工具。无论是企业还是个人,都可能需要创建自己的数据库以满足特定的需求。本文将详细介绍创建一个新数据库的步骤,包括规划、选择数据…

【Leetcode】1705. 吃苹果的最大数目

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接🔗 有一棵特殊的苹果树,一连 n n n 天,每天都可以长出若干个苹果。在第 i i i 天,树上会长出 a p p l e s [ i ] apples[i] apples[i] 个苹果&a…

leetcode hot100 轮转数组

189. 轮转数组 已解答 中等 相关标签 相关企业 提示 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮…