大恒相机开发(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. 导入必要的库

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

    7. 设置相机参数

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

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

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

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

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

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

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

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

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

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

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

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

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

    作者:资源补给站

    物联沃分享整理
    物联沃-IOTWORD物联网 » 大恒相机开发(1)—Python调用采集彩色图像并另存为本地

    发表回复