这段代码是一个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()
下面是代码的详细解读和功能说明:
-
导入必要的库:
cv2
:OpenCV库,用于图像处理。gxipy
:大恒相机的SDK,用于控制相机。PIL
(Python Imaging Library):用于图像处理,这里用于将numpy数组转换为图像。datetime
:用于获取当前时间,以便在保存图片时添加时间戳。
-
定义
main
函数:这是程序的主函数,所有操作都在这个函数中执行。 -
设置相机参数:
Width_set
和Height_set
:分别设置相机的分辨率宽度和高度。framerate_set
:设置相机的帧率。num
:设置采集图像的帧数。
-
创建设备对象:
device_manager = gx.DeviceManager()
:创建一个设备管理对象。dev_num, dev_info_list = device_manager.update_device_list()
:枚举所有可用的设备,并获取设备列表。
-
检查设备数量:
- 如果没有设备,打印信息并退出程序。
-
打开设备:
- 通过设备序列号打开一个设备。
-
检查相机类型:
- 如果相机不支持彩色图像,打印信息并关闭设备。
-
设置相机参数:
cam.Width.set(Width_set)
和cam.Height.set(Height_set)
:设置相机的宽度和高度。cam.AcquisitionFrameRateMode.set(gx.GxSwitchEntry.ON)
:设置为连续采集模式。cam.AcquisitionFrameRate.set(framerate_set)
:设置帧率。
-
获取当前帧率:
framerate_get = cam.CurrentAcquisitionFrameRate.get()
:获取当前采集的帧率,并打印。
-
开始数据采集:
cam.stream_on()
:开启数据流。
-
采集图像:
- 循环
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()
:保存图像到指定路径,并添加时间戳。
- 循环
-
打印采集信息:
- 打印每帧图像的ID、高度、宽度、设置的帧率和当前帧率。
-
停止采集和关闭设备:
cam.stream_off()
:停止数据流。cam.close_device()
:关闭设备。
-
程序入口:
if __name__ == "__main__":
:确保当脚本被直接运行时,才执行main
函数。
这个程序的主要功能是初始化大恒相机,设置分辨率、帧率等参数,然后连续采集指定数量的图像,并将每幅图像保存到本地。程序还打印了采集过程中的一些信息,如帧ID和帧率。