海康工业网络相机 ubuntu使用opencv调用-python 支持Genicam和Gentl

海康工业网络相机 ubuntu使用opencv调用-python 不使用sdk

用户指导里面说购买的海康相机支持GigE Vision,嫌官方的sdk太复杂 就找了 一个别的方法
Harvesters:支持GenICam标准的跨平台库,可连接GigE Vision设备并获取图像流。
/opt/MVS/lib/64/MvProducerGEV.cti是安装MVS的路径上的文件

Matrix Vision的SDK根据相机接口类型提供了不同的GenTL驱动文件:

  • MvProducerGEV.cti:用于GigE Vision相机(千兆网口工业相机)。
  • MvProducerU3V.cti:用于USB3 Vision相机(USB3接口工业相机)。
  • mvGenTLProducer.cti 是旧版本名称,新版本已改为上述命名方式。
from harvesters.core import Harvester
import cv2

# 创建Harvester对象
h = Harvester()

# 加载GenTL驱动文件(需替换实际路径)
# h.add_file(r"C:\Program Files\MATRIX VISION\mvIMPACT Acquire\bin\x64\mvGenTLProducer.cti")  # Windows示例
h.add_file("/opt/MVS/lib/64/MvProducerGEV.cti")

# 刷新设备列表
h.update()  # 替代旧版的update_device_info()

# 列出所有检测到的设备
print("可用设备列表:", h.device_info_list)

# 选择第一个设备并连接
if len(h.device_info_list) > 0:
    ia = h.create_image_acquirer(1)  # 0表示第一个设备
    ia.start_image_acquisition()

    try:
        while True:
            # 获取图像缓冲区
            with ia.fetch_buffer() as buffer:
                # 转换为OpenCV格式
                frame = buffer.payload.components[0].data.reshape(
                    buffer.height, buffer.width, -1
                )
                cv2.imshow("GigE Camera", frame)

            if cv2.waitKey(1) == ord('q'):
                break
    finally:
        ia.stop_image_acquisition()
        ia.destroy()
        h.reset()
else:
    print("未检测到设备!")

方法二使用aravis调用相机

import gi
gi.require_version('Aravis', '0.6')
from gi.repository import Aravis
import cv2
import numpy as np
Aravis.update_device_list() 
print(f"检测到{Aravis.get_n_devices()}台设备")
device_count = Aravis.get_n_devices()  # 获取设备总数[1](@ref)

# 遍历设备信息
for i in range(device_count):
    device_id = Aravis.get_device_id(i)  # 设备唯一标识符
    print(f"设备{i}: {device_id}")
# 初始化相机
camera = Aravis.Camera.new(Aravis.get_device_id(0))
stream = camera.create_stream(None, None)

# # 开始采集
# camera.start_acquisition()
buffer = stream.timeout_pop_buffer(2000000)
payload = camera.get_payload()

# 预分配5个缓冲区
for _ in range(5):
    stream.push_buffer(Aravis.Buffer.new_allocate(payload))
camera.start_acquisition()
buffer = stream.pop_buffer()
if buffer.get_status() == Aravis.BufferStatus.SUCCESS:
    # 将原始数据转换为numpy数组
    image_data = buffer.get_data()
    np_array = np.frombuffer(image_data, dtype=np.uint8)
    # 获取图像元数据
    width = buffer.get_image_width()
    height = buffer.get_image_height()
    # 转换为OpenCV格式(假设为BayerRG8格式)
    cv_image = cv2.cvtColor(np_array.reshape(width,height), cv2.COLOR_BAYER_GR2BGR)

    cv2.imwrite("color_image.png", cv_image)
    print("已生成彩色预览图color_image.png")

# 释放资源
# stream.push_buffer(buffer)
camera.stop_acquisition()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值