栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python调用海康工业相机并用opencv显示 出现no data[0x80000007]

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python调用海康工业相机并用opencv显示 出现no data[0x80000007]

前一段时间做项目用的是海康工业相机,想在python代码中调用相机拍照,参考了这篇文章:python调用海康工业相机并用opencv显示(整体实现)_J&A~ing的博客-CSDN博客_python调用海康工业相机

代码大致是需要循环调用相机拍照,以拍到的照片作为条件调用Vision Master软件特定模板。在进行一次循环之后,发现运行代码出现了如下问题:

no data[0x80000007]

通过查询海康的官方文件,发现状态码0x80000007表示无数据。

相机无数据的原因很多,无法判断是什么原因导致的。但是发现,每次重启相机后的第一此循环都是正常的,然后都会在第一次循环之后出现这个问题。于是就可以猜测为相机参数设置的问题。

在每次重启相机运行代码之前,连接相机打开MVS,会发现相机的Trigger Mode(触发模式)是Off的(即为内触发)。此时不管是用MVS还是用python代码打开相机都没有任何问题。

然而在调用Vision Master软件,并在VM中使用相机后,再打开MVS,发现相机的Trigger Mode变为On了(即为外触发)。此时用MVS或者用python打开相机都会无数据。

因此,为了解决这个问题,需要在代码中让相机在捕捉画面之前将Trigger Mode更改为Off。

def main():
    # 枚举设备
    deviceList = enum_devices(device=0, device_way=False)
    # 判断不同类型设备
    identify_different_devices(deviceList)
    # 输入需要被连接的设备
    nConnectionNum = input_num_camera(deviceList)
    # 创建相机实例并创建句柄,(设置日志路径)
    cam, stDeviceList = creat_camera(deviceList, nConnectionNum, log=False)
    # decide_divice_on_line(cam)  ==============
    # 打开设备
    open_device(cam)



    # ch:设置触发模式为off | en:Set trigger mode as off
    ret = cam.MV_CC_SetEnumValue("TriggerMode", MV_TRIGGER_MODE_OFF)



    # # 设置缓存节点个数
    # set_image_Node_num(cam, Num=10)
    # # 设置取流策略
    # set_grab_strategy(cam, grabstrategy=2, outputqueuesize=10)
    # 设置设备的一些参数
    # set_Value(cam, param_type="bool_value", node_name="TriggerCacheEnable", node_value=1)
    # 获取设备的一些参数
    # get_value = get_Value(cam , param_type = "int_value" , node_name = "PayloadSize")

    stdcall = input("回调方式取流显示请输入 0    主动取流方式显示请输入 1:")
    if int(stdcall) == 0:
        # 回调方式抓取图像
        call_back_get_image(cam)
        # 开启设备取流
        start_grab_and_get_data_size(cam)
        # 当使用 回调取流时,需要在此处添加
        print("press a key to stop grabbing.")
        msvcrt.getch()
        # 关闭设备与销毁句柄
        close_and_destroy_device(cam)
    elif int(stdcall) == 1:
        # 开启设备取流
        start_grab_and_get_data_size(cam)
        # 主动取流方式抓取图像
        access_get_image(cam, active_way="getImagebuffer")
        # 关闭设备与销毁句柄
        close_and_destroy_device(cam)

这样一来问题就解决了!

关于海康相机的触发模式可以参考这篇文章:海康相机的触发模式_zxmyoung的博客-CSDN博客

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/269318.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号