1.问题和需求
需求是使用海康热成像相机实时获取温度矩阵。相机说明文档提供了全屏测温实时取流的方法和代码,其将字节流写入到本地文件,然后通过解析文件的方式获得温度矩阵。但在实际应用中必须要在内存中进行实时解析。
2. 方法和思路
将字节流缓存到内存中,当缓存中的数据量大于一帧数据的数据量时,将该帧数据拷贝出来解析为Mat矩阵
- 登录相机后,开启RealPlay,byVideoCodingType需要设置为1,并注册取流回调函数,所有温度原始数据会通过回调函数进行下发,同时需要通过协议透传配置相机全屏测温参数。
- 缓存回调函数给出的数据,并实时解析为OpenCV Mat:
- 回调函数每次给出的数据长度不一定都一样,因此,需要把数据先缓存起来,当满足一帧的数据量时,再进行解析
- 使用QBuffer进行缓存
- 数据解析:可以直接修改官方文档中给出的解析本地文件的demo
3. 参考代码
在回调函数中进行缓存和解析
void CALLBACK g_RealDataCallBack_V30(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,void* dwUser)
{
Camera* camera = (Camera*)dwUser;
switch (dwDataType)
{
case NET_DVR_STREAMDATA:
{
//接收到的数据写入缓存
//BUFFER为QBuffer类型的对象
camera->BUFFER->write((char