linux获取红外温度数据及解析的源码二次开发

前提:红外摄像厂商的SDK中只提供了在windows下的红外温度获取及解析的代码实例并且需要依托VS进行部署,那么如何在linux下实现这个功能?

准备资料:供应商的SDK、linux环境等

本次是以c++代码进行二次开发为例,具体代码如下:

1. 红外温度数据获取代码:

#include <iostream>
#include <cstring>
#include "HCNetSDK.h"

FILE* fTemData = NULL;

void CALLBACK g_RealDataCallBack_V30(LONG lRealHandle, DWORD dwDataType, BYTE* pBuffer, DWORD dwBufSize, void* dwUser)
{
    // 将获取到的全屏测温温度矩阵数据保存到本地文件,后面需要根据数据结构自行解析
    switch (dwDataType)
    {
    case NET_DVR_SYSHEAD:
        break;
    case NET_DVR_STREAMDATA:
        if (fTemData != NULL)
        {
            fwrite(pBuffer, dwBufSize, 1, fTemData);
        }
        break;
    default:
        break;
    }
}

int main() {
    //---------------------------------------
    // 初始化
    NET_DVR_Init();

    //---------------------------------------
    // 注册设备
    LONG lUserID;

    // 登录参数,包括设备地址、登录用户、密码等
    NET_DVR_USER_LOGIN_INFO struLoginInfo = { 0 };
    struLoginInfo.bUseAsynLogin = 0; // 同步登录方式
    strcpy(struLoginInfo.sDeviceAddress, "xxx"); // 设备IP地址
    struLoginInfo.wPort =xxx ; // 设备服务端口
    strcpy(struLoginInfo.sUserName, "admin"); // 设备登录用户名
    strcpy(struLoginInfo.sPassword, "xxx"// 设备登录密码

    // 设备信息,输出参数
    NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = { 0 };

    lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);
    if (lUserID < 0)
    {
        printf("Login failed, error code: %d\n", NET_DVR_GetLastError());
        NET_DVR_Cleanup();
        return 1;
    }

    //---------------------------------------
    // 全屏测温参数配置

    // 输入参数
    NET_DVR_XML_CONFIG_INPUT struInput = { 0 };
    struInput.dwSize = sizeof(struInput);

    // 输出参数
    NET_DVR_XML_CONFIG_OUTPUT struOutputParam = { 0 };
    struOutputParam.dwSize = sizeof(struOutputParam);

    char szUrl[512]; // URL
    char szOutput[8 * 1024] = { 0 }; // 输出结果
    char szStatusBuf[1024] = { 0 };  // 状态信息
    char pBuf[2 * 1024] = { 0 };

    // 获取参数
    memset(szUrl, 0, sizeof(szUrl));
    sprintf(szUrl, "%s", "GET /ISAPI/Thermal/channels/2/streamParam\r\n");

    // 不同功能对应不同URL
    struInput.lpRequestUrl = szUrl;
    struInput.dwRequestUrlLen = strlen(szUrl);

    // 获取时输入为空
    struInput.lpInBuffer = NULL;
    struInput.dwInBufferSize = 0;

    // 分配输出内存
    memset(szOutput, 0, sizeof(szOutput));
    struOutputParam.lpOutBuffer = szOutput;
    struOutputParam.dwOutBufferSize = sizeof(szOutput);

    // 输出状态
    memset(szStatusBuf, 0, sizeof(szStatusBuf));
    struOutputParam.lpStatusBuffer = szStatusBuf;
    struOutputParam.dwStatusSize = sizeof(szStatusBuf);

    if (!NET_DVR_STDXMLConfig(lUserID, &struInput, &struOutputParam))
    {
        printf("NET_DVR_STDXMLConfig failed, error code: %d\n", NET_DVR_GetLastError());
    }
    else
    {
        printf("NET_DVR_STDXMLConfig successfully!\n");
        printf("%s\n", szOutput);
    }

    // 设置参数
    memset(szUrl, 0, sizeof(szUrl));
    sprintf(szUrl, "%s", "PUT /ISAPI/Thermal/channels/2/streamParam\r\n");

    // 输入JSON数据
    memset(pBuf, 0, sizeof(pBuf));
    strcpy(pBuf, "<ThermalStreamParam xmlns=\"http://www.isapi.org/ver20/XMLSchema\" version=\"2.0\">"
        "<videoCodingType>pixel-to-pixel_thermometry_data</videoCodingType>"
        "</ThermalStreamParam>");

    // 输入参数
    struInput.lpInBuffer = pBuf;
    struInput.dwInBufferSize = sizeof(pBuf);

    // 输出结果
    memset(szOutput, 0, sizeof(szOutput));
    struOutputParam.lpOutBuffer = szOutput;
    struOutputParam.dwOutBufferSize = sizeof(szOutput);

    // 输出状态
    memset(szS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值