需要安装摄像机驱动
进入官网,点击注册,填写信息注册成功后,点击下载中心,找到自己使用的摄像头,以及对应的系统,进行驱动下载安装即可
直接在驱动安装路径下,找到Python SDK,这个就是后面写代码需要用到的库。放到Library文件夹指定位置。之后调用就好。
这里找到一个开源,功能就是截取一张图。
import gxipy as gx
import matplotlib.pyplot as plt
# 枚举设备。
# dev_info_list 是设备信息列表,列表的元素个数为枚举到的设备个数,列表元素是字典,其中包含设备索引(index)、ip 信息(ip)等设备信息
device_manager = gx.DeviceManager()
dev_num, dev_info_list = device_manager.update_device_list()
if dev_num == 0:
sys.exit(1)
# 打开设备
# 获取设备基本信息列表
str_sn = dev_info_list[0].get("sn")
# 通过序列号打开设备
cam = device_manager.open_device_by_sn(str_sn)
# 开始采集
cam.stream_on()
# 获取流通道个数
# 如果 int_channel_num == 1,设备只有一个流通道,列表 data_stream 元素个数为 1
# 如果 int_channel_num > 1,设备有多个流通道,列表 data_stream 元素个数大于 1
# 目前千兆网相机、USB3.0、USB2.0 相机均不支持多流通道。
# int_channel_num = cam.get_stream_channel_num()
# 获取数据
# num 为采集图片次数
num = 1
for i in range(num):
# 从第 0 个流通道获取一幅图像
raw_image = cam.data_stream[0].get_image()
# 从彩色原始图像获取 RGB 图像
rgb_image = raw_image.convert("RGB")
if rgb_image is None:
continue
# 从 RGB 图像数据创建 numpy 数组
numpy_image = rgb_image.get_numpy_array()
if numpy_image is None:
continue
# 显示并保存获得的 RGB 图片
plt.imshow(numpy_image)
plt.show()
# 停止采集,关闭设备
cam.stream_off()
cam.close_device()
根据上面的这个写了一个可以实时获取图像的demo。你可以在这个基础上加入对视频,图片的获取。
import gxipy as gx
import cv2
import numpy as np
# 初始化设备管理器
device_manager = gx.DeviceManager()
# 枚举设备,返回设备数量和设备信息列表
dev_num, dev_info_list = device_manager.update_device_list()
if dev_num == 0:
print("No devices found")
sys.exit(1)
# 获取第一个设备的序列号并打开设备
str_sn = dev_info_list[0].get("sn")
cam = device_manager.open_device_by_sn(str_sn)
# 开始采集
cam.stream_on()
try:
while True:
# 从第 0 个流通道获取一幅图像
raw_image = cam.data_stream[0].get_image()
if raw_image is None:
continue
# 从彩色原始图像获取 RGB 图像
rgb_image = raw_image.convert("RGB")
if rgb_image is None:
continue
# 从 RGB 图像数据创建 numpy 数组
numpy_image = rgb_image.get_numpy_array()
if numpy_image is None:
continue
# 将图像从 RGB 转换为 BGR,因为 OpenCV 使用 BGR 格式
bgr_image = cv2.cvtColor(numpy_image, cv2.COLOR_RGB2BGR)
# 显示图像
cv2.imshow("Real-Time Image", bgr_image)
# 按下 'q' 键退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
finally:
# 停止采集并关闭设备
cam.stream_off()
cam.close_device()
# 关闭所有 OpenCV 窗口
cv2.destroyAllWindows()