ubunut下用Python连接多个大恒图像2D相机,获取图像信息。

ubunut下用Python 连接大恒图像相机,获取图像信息。

准备工作

1,设备:相机,相机支架(可选)。
2,编程环境

直人正题

去官网下载Python开发包。

http://www.daheng-imaging.com/Software/index.aspx?nodeid=304

ubunut下用Python连接多个大恒图像2D相机,获取图像信息。_第1张图片
我选择第6个下载。下载的时候也要把第3个也下载,里面有后面要用到的软件。

安装相机需要的软件。
进入下载完成的目录,输人 ./Galaxy_camera.run

~/Downloads/Galaxy_Linux-x86_Gige-U3_32bits-64bits_1.1.1908.9162$ ./Galaxy_camera.run

安装完成后可以用软件测试自己的相机能否连接。

IP配置

连接相机的时候要自己配置IP

点这里进行IP的配置


这个是我配的IP,我的电脑是有2个网口,可以同时访问2个相机。

配置多个相机IP的时候有一个重要的地方要注意了:不能乱配。

测试连接相机

进入安装好软件的目录中,找到可运行文件如下图:
ubunut下用Python连接多个大恒图像2D相机,获取图像信息。_第2张图片

可以看到已经连接到一个相机,我们是要连接多个相机。就要光掉一些东西。
ubunut下用Python连接多个大恒图像2D相机,获取图像信息。_第3张图片

关了后就可以访问到多个相机了。
ubunut下用Python连接多个大恒图像2D相机,获取图像信息。_第4张图片
ubunut下用Python连接多个大恒图像2D相机,获取图像信息。_第5张图片
然后我们来打开相机看看。

nice。

配置环境

在前面我们下载了Python的API,里面有几个文档可以帮助到你很多。
ubunut下用Python连接多个大恒图像2D相机,获取图像信息。_第6张图片
我们要按着里面的来,环境很容易就能配好。
ubunut下用Python连接多个大恒图像2D相机,获取图像信息。_第7张图片

配好环境后就是编代码了。

import gxipy as gx
import sys
import numpy as np
from PIL import Image
import cv2
import math

#
device_manager = gx.DeviceManager()

# update_all_device_list()
dev_num,dev_info_list = device_manager.update_all_device_list()
if dev_num == 0:
    sys.exit(1)

print(dev_num)
print(dev_info_list)
# 打开设备
# 方法一
# 获取设备基本信息列表
# str_sn = dev_info_list[0].get("sn")
# print (str_sn)

# 通过序列号打开设备
# cam = device_manager.open_device_by_sn(str_sn)

# 方法二
# 通过用户 ID 打开设备
# str_user_id = dev_info_list[0].get("user_id")
# cam = device_manager.open_device_by_user_id(str_user_id)
# 方法三
# 通过索引打开设备
# str_index = dev_info_list[0].get("index")
# cam = device_manager.open_device_by_index(str_index)
# 下面为只针对千兆网相机使用的打开方式
# 方法四
for i in dev_info_list:
    # 通过 ip 地址打开设备
    str_ip= i.get("ip")
    print(str_ip)
    cam = device_manager.open_device_by_ip(str_ip)
    # 方法五
    # 通过 mac 地址打开设备
    # str_mac = dev_info_list[0].get("mac")
    # print(str_mac)
    # cam = device_manager.open_device_by_mac(str_mac)

    # 开始采集
    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()
    print(int_channel_num)

    # 获取数据
    # num 为采集图片次数
    num = 1
    for i in range(num):
        # 打开第 0 通道数据流
        raw_image = cam.data_stream[0].get_image()
        if raw_image.get_status() == gx.GxFrameStatusList.INCOMPLETE:
            print("incomplete frame")
        # 停止采集
        image = np.array(raw_image)
        print("image",image)
        print(type(raw_image))
        # 从黑白原始图像获取 numpy 数组
        numpy_image = raw_image.get_numpy_array()
        if numpy_image is None:
            continue
        # 之后,用户可根据获取的 numpy_array 显示、保存图像
        print(numpy_image)

    # 显示并保存获得的黑白图片
    image = Image.fromarray(numpy_image, 'L')
    image.show()
    image.save("acquisition_mono_image.jpg")
# 停止采集
cam.stream_off()

# 关闭设备
cam.close_device()
print("over")


好了,OK了。

你可能感兴趣的:(相机连接)