对于调用海康相机的整个流程,下面的这个博客说的很详细了,我一开始也是看的这个
python调用海康工业相机并用opencv显示(整体实现)_J&A~ing的博客-CSDN博客_python调用海康工业相机
众所周知,MVS里面可以自己调整参数 ,例如曝光时间,增益等,点一下输一个值就能解决问题了。
但是如果我们想用自己打包的用户界面,让用户输入数值或者模式等,然后不经过MVS的点击操作直接改变。
这种情况就需要我们自己写了。网上(以及帮助文档)有C++的参数获取案例,没办法我C++写的一般,本文用的是PyQt5+MV-CS060-GM10-PRO进行调用
C++调用的案例
海康工业相机参数设置与获取_青山笑我依旧在的博客-CSDN博客_海康工业相机参数设置
-
首先打开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软件调用到摄像头地址进行测试也无法
获取
到摄