文章目录
前言
记录一下使用大恒的MER相机采集图片的过程
一、相机整体工作流程
相机的整体工作流程如图所示:
二、图像采集代码
前提说明:运行前在相机驱动安装文件GalaxySDK中找到GxIAPI.dll文件,并复制到Samples–Python SDK–gxipy文件夹里面,否则运行会提示缺少GxIAPI.dll文件,然后把gxipy模块复制到项目文件中,才能导入成功。
代码如下:
import gxipy as gx
from PIL import Image
print("")
print("-------------------------------------------------------------")
print("Sample to show how to acquire color image continuously and show acquired image.")
print("-------------------------------------------------------------")
print("")
print("Initializing......")
print("")
# 创建设备管理对象
device_manager = gx.DeviceManager()
# 枚举设备,dev_num为相机数量
dev_num, dev_info_list = device_manager.updata_device_list()
if dev_num == 0:
print("Number of enumerated devices is 0")
# 打开相机
cam = device_manager.open_device_by_index(1)
# 设置连续获取模式
cam.TriggerMode.set(gx.GxSwithEntry.OFF)
# 设置曝光时间
cam.ExposureTime.set(10000.0)
# 设置增益,增益越大,噪音越大
cam.Gain.set(10.0)
# 获取改善图像质量的参数
if cam.GammaParam.is_readable(): # gamma参数
gamma_value = cam.GammaParam.get()
gamma_lut = gx.Utility.get_gamma_lut(gamma_value)
else:
gamma_lut = None
if cam.ContrastParam.is_readable(): # 对比度参数
contrast_value = cam.ContrastParam.get()
contrast_lut = gx.Utility.get_contrast_lut(contrast_value)
else:
contrast_lut = None
if cam.ColorCorrectionParam.is_readable(): # 白平衡参数
color_correction_param = cam.ColorCorrectionParam.get()
else:
color_correction_param = 0
# 开启采集控制
cam.stream_on()
# 获取流通道个数
int_channel_num = cam.get_stream_channel_num()
# 如果 int_channel_num == 1,设备只有一个流通道,列表 data_stream 元素个数为 1
# 如果 int_channel_num > 1,设备有多个流通道,列表 data_stream 元素个数大于 1
# 目前千兆网相机、 USB3.0、 USB2.0 相机均不支持多流通道
num = 1 # 设置采集图片的数量
for i in range(num):
# 打开第0通道数据流
raw_image = cam.data_stream[0].get_image()
# 判断是否为残帧
if raw_image.get_status() == gx.GxFrameStatusList.INCONPLETE:
print("incomplete frame")
# 把原始图像转换为RGB图像
RGB_image = raw_image.convert("RGB")
# 改善图像质量
RGB_image.image_improvement(color_correction_param, contrast_lut, gamma_lut)
# 把RGB图像转换为numpy数组
numpy_image = RGB_image.get_numoy_array()
# 图片显示
img = Image.fromarray(numpy_image, "RGB")
img.show()
# 保存图像
img.save("{}.png".format(i))
# 关闭采集控制
cam.stream_off()
# 关闭相机
cam.close_device()