添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

对于调用海康相机的整个流程,下面的这个博客说的很详细了,我一开始也是看的这个

python调用海康工业相机并用opencv显示(整体实现)_J&A~ing的博客-CSDN博客_python调用海康工业相机

众所周知,MVS里面可以自己调整参数 ,例如曝光时间,增益等,点一下输一个值就能解决问题了。

但是如果我们想用自己打包的用户界面,让用户输入数值或者模式等,然后不经过MVS的点击操作直接改变。 这种情况就需要我们自己写了。网上(以及帮助文档)有C++的参数获取案例,没办法我C++写的一般,本文用的是PyQt5+MV-CS060-GM10-PRO进行调用

C++调用的案例

海康工业相机参数设置与获取_青山笑我依旧在的博客-CSDN博客_海康工业相机参数设置

  1. 首先打开MVS,连接相机

既然要手调,那就必须要找到对应参数的名字才可以。阅读帮助文档可以知道有一系列方法,例如MV_CC_SetIntValue / MV_CC_SetEnumValue等,但是需要输入对应的参数键值

虽然文档里并没有写,但其实从MVS里是可以直接看到的,点击属性树(后面三个都不管用)。找到你想修改的值(英文)

比如说我想修改自动曝光模式,找到对应的一栏

可以看到第一行是键值,第二行是这里的数据类型(Enum),因此就要用Set(Get)EnumValue,下拉栏里是可选的值(off / once / continuous)。

如果换成曝光时间,也同理,只不过数据类型变成了Float。其他的都可以类推。

这个时候就可以进行对应的数值的获取和修改了。

2. 案例展示

口说无凭,也不好解释。我这里想达成的需求是,用户自己改变相机的曝光模式。三种分别为,手动调整曝光时间、自动曝光、自动曝光并且自动增益

cam是MvCamera()

  • 对于第一种情况,就很简单了 ,只有一个参数修改的指令
if self.exposure_mode.currentText() == '手动曝光(ms)':
    self.info_text.setText('曝光模式设置中...')  # info_text是我设置的一个状态信息栏,属于QLineEdit
        ans_exposure = float(self.exposure_time_text.text()) # 时间输入栏,setReadOnly==False
        exposure_time = ans_exposure * 1000
    except:
        exposure_time = self.exposure_time * 1000
    ret = cam.MV_CC_SetEnumValue('ExposureAuto', MV_EXPOSURE_AUTO_MODE_OFF)
    ret = cam.MV_CC_SetEnumValue('GainAuto', MV_GAIN_MODE_OFF)
    ret = cam.MV_CC_SetFloatValue("Gain", 0)
    ret = cam.MV_CC_SetFloatValue("ExposureTime", exposure_time)
    self.info_text.setText('曝光模式设置完成')
    time.sleep(1)

实现的就是输入浮点型的时间值然后赋值(这里我提前将自动模式调整为OFF,增益调整为0)。对于Set类方法,直接给值就行了(Get类是不行的,后面会讲到)

这里要注意,对于Enum的数据类型,在调用MV_CC_SetEnumValue时,第二个参数是要用SDK所给的属性的。如果你在开头把相关的文件都导进来了的话,IDE是会自己给你提醒的。就像这样

  • 对于第二种情况,存在Get指令,需要提前定义相关的结构体(不能用Python的数据类型)
elif self.exposure_mode.currentText() == '自动曝光':
    self.exposure_time_text.setReadOnly(True)
    self.info_text.setText('曝光模式设置中...')
    cnt_exposure_time = MVCC_FLOATVALUE()  # 定义专用数据类型
    memset(byref(cnt_exposure_time), 0, sizeof(MVCC_FLOATVALUE)) # 定义结构体
    ret = cam.MV_CC_SetFloatValue('Gain', 0)  # 增益归0
    ret = cam.MV_CC_SetEnumValue('ExposureAuto', MV_EXPOSURE_AUTO_MODE_CONTINUOUS)
    time.sleep(3)  # 别人文章的经验,自动曝光3秒后获得对应的值,即可关闭
    ret = cam.MV_CC_GetFloatValue("ExposureTime", cnt_exposure_time)  # 用这个特殊的数据结构获取值
    ret = cam.MV_CC_SetEnumValue('ExposureAuto', MV_EXPOSURE_AUTO_MODE_OFF)
    ret = cam.MV_CC_SetFloatValue("ExposureTime", cnt_exposure_time.fCurValue) #  fCurValue转换并赋值
    self.info_text.setText('曝光模式设置完成')
    time.sleep(1)

可以看出,Set和Get所接受值的数据类型是完全不一样的,需要特别注意

  • 第三点同理,就不写注释了
elif self.exposure_mode.currentText() == '自动曝光+自动增益':
    self.exposure_time_text.setReadOnly(True)
    self.info_text.setText('曝光模式设置中...')
    cnt_exposure_time, cnt_gain_value = MVCC_FLOATVALUE(), MVCC_FLOATVALUE()
    memset(byref(cnt_exposure_time), 0, sizeof(MVCC_FLOATVALUE))
    memset(byref(cnt_gain_value), 0, sizeof(MVCC_FLOATVALUE))
    ret = cam.MV_CC_SetEnumValue('ExposureMode', MV_EXPOSURE_AUTO_MODE_CONTINUOUS)
    time.sleep(3)
    ret = cam.MV_CC_SetEnumValue('GainAuto', MV_GAIN_MODE_CONTINUOUS)
    time.sleep(3)
    ret = cam.MV_CC_GetFloatValue("ExposureTime", cnt_exposure_time)
    ret = cam.MV_CC_GetFloatValue("Gain", cnt_gain_value)
    ret = cam.MV_CC_SetEnumValue('GainAuto', MV_GAIN_MODE_OFF)
    ret = cam.MV_CC_SetEnumValue('ExposureAuto', MV_EXPOSURE_AUTO_MODE_OFF)
    ret = cam.MV_CC_SetFloatValue("ExposureTime", cnt_exposure_time.fCurValue)
    ret = cam.MV_CC_SetFloatValue("Gain", cnt_gain_value.fCurValue)
    self.info_text.setText('曝光模式设置完成')
    time.sleep(1)
查看相机SDK,查看通用配置接口MV_CC_Set/Get(数据类型)Value,每一个 参数 设置对应一个数据类型,可以在XML节点 参数 类型列表查看。1、曝光时间设置 可以看到曝光时间是一个Float数据类型 ,GetNode:key 参数 是ExposureTime,查看 海康 相机的官方软件MVS已获得当前相机曝光时间范围。连接上相机后,点击常用属性,在曝光时间设置停留鼠标,就可以显示出范围。 因此,曝光时间a的范围是27-25000000us,代码为: 2、白平衡设置
海康 工业相机 常用 参数 修改以及使用 OpenCV - Python 采集图像一、调节相机 参数 1.调节曝光时间2.修改图像尺寸和像素格式3.保存 参数 二、 Python 采集成 opencv 可识别格式,并用 opencv 显示 最近需要工业摄像头给之前的 python 项目做采集任务,于是选了 海康 工业相机 ,对于单纯做采集任务而不想深究的人来说看繁杂的开发文档很麻烦,所以把这两天的工作总结一下,希望能对后面用 海康 相机的新手有帮助。 一、调节相机 参数 海康 的MVS就可以调节 参数 。 1.调节曝光时间 接好相机打开MVS,在右边常用属
海康 工业相机 的底层SDK中提供了两种不同方式的图像数据 获取 方式,一种是回调方式,一种是主动取流方式。但是官方示例中,只提供了相关数据 获取 到之后的打印信息,对于图像数据的解析并没有给出,基于以上情况,本文对于这两种取流方式 获取 到的图像数据进行解析。 一、使用前提..
搜罗了网上一些关于如何在 python 中实现 海康 威视相机的连接与画面播放的资料,最直接的方式是通过rtsp流来实现。 海康 的rtsp协议格式如下(参考: 海康 相机使用RTSP): rtsp://[username]:[passwd]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream rtsp://admin:12345@192.168....
因为项目的原因,笔者需要利用程序来实时调用 海康 工业相机 ,而不是简单的利用 海康 的驱动来调用相机。 在经历了反复的踩坑填坑之后,笔者总结了利用c#和 python 调用 海康 相机的两种方法 一、准备工作 无论是用c#还是 python ,都是要通过 海康 的SDK来进行 二次开发 的。 海康 的SDK相当于一个库,里面有各种用于 海康 相机的函数,这些函数被封装成供各大编程语言使用。所以,要想利用 python 或者c#与 海康 进行实时交互,就
在windous系统下 Python 实现 海康 相机登入、预览、抓图、光学变倍、相机激活、区域聚焦、区域曝光功能;linux系统下载相应的 海康 SDK,并将lib文件更换为相对应的库文件,同时将HCNetSDKCom文件夹拷贝出来(与lib文件夹同一级别) python 实现的功能如下: import numpy as np import os import ctypes # 获取 所有的库文...
通过 python 调用 海康 威视工业摄像头并进行图像存储问题(数据流 获取 问题未能解决) 先说情况,本人是做视觉检测的需要高倍率摄像头进行实时检测,也就是需要深度学习进行图片数据处理,但是这个又是 python 来进行分析,而 海康 威视主要程序代码是以C为主的,传过来的数据我也尝试的去解析都是不能转化成 python 的BGR图像。 具体参照了:通过cv2调用 海康 威视摄像头,但这个不能调用工业摄像头,通过官方给一个400什么软件要激活摄像头,可是却并不能检测到工业摄像头,通过mvs软件调用到摄像头地址进行测试也无法 获取 到摄