当前位置: 首页 > article >正文

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

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

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

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

在这里插入图片描述

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

import cv2
import gxipy as gx
from PIL import Image
import datetime

def main():
    Width_set = 2448  # 设置分辨率宽   360
    Height_set = 2048  # 设置分辨率高  480
    framerate_set = 1.4  # 设置帧率     #r=400r
    num = 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")
        return
    else:
        # 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()
        return
    else:
        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("获取彩色原始图像失败.")
            continue

        rgb_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:
            continue

        img = 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.kler.cn/a/445206.html

相关文章:

  • 【HarmonyOS NEXT】Web 组件的基础用法以及 H5 侧与原生侧的双向数据通讯
  • qlib优缺点
  • 《探秘 Qt Creator Manual 4.11.1》
  • 深入解析MySQL Explain关键字:字段意义及调优策略
  • 中间件 redis安装
  • android 登录界面编写
  • 自动驾驶AVM环视算法--python版本的前后左右单视角投影模式
  • SQL进阶技巧:如何计算算法题分发糖果问题?
  • 简单的bytebuddy学习笔记
  • C#中的匿名方法、Lambda表达式、泛型委托
  • 【传感器技术】期末考试试题总结 ver1,电阻式,电感式,电容式,压电式,霍尔式,温度传感器,光电传感器
  • 【Redis经典面试题一】如何解决Redis和数据库一致性的问题?
  • Linux之文件相关命令
  • UE5 物体自动跟随主角镜头转向
  • 群晖利用acme.sh自动申请证书并且自动重载证书的问题解决
  • 基于LSB最低有效位的音频水印嵌入提取算法FPGA实现,包含testbench和MATLAB对比
  • ADOADO.NET基础
  • OpenGL ES 03 加载3张图片并做混合处理
  • 四相机设计实现全向视觉感知的开源空中机器人无人机
  • 共创共建!葡萄城 SpreadJS 完成 HarmonyOS NEXT 操作系统兼容认证
  • tcp_ack函数
  • 前端模块化
  • 【ETCD】ETCD Leader 节点写入数据流程概览
  • 计算机基础知识复习12.20
  • LCD1602显示模块详解
  • 数说故事聚焦“卖车”场景,推出AI汽车销售转化解决方案