作者 ookk303

irc逻辑改动

... ... @@ -19,7 +19,7 @@
#define MAJOR_VERSION 0x01
#define MINOR_VERSION 0x03
#define MODIFY_VERSION 0x09
#define DEBUG_VERSION 0x05
#define DEBUG_VERSION 0x06
//禁止修改行 滤波方式
#define FILTERING_TYPE HIGH_PASS_FILTERING
... ...
... ... @@ -117,10 +117,19 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len
//红外数据纠正处理
JZC1_Irc_DataCorrect(data);
//将 8位的raw数据 合并为16位数据
U16_t * u16Data = (U16_t *)malloc(sizeof(U16_t) * (data_len / 2));
int u16DataSize = data_len / 2;
//合成像素,u8转换合并成u16
JZsdk_Merge_U8_to_U16_byReverse(data, data_len, u16Data, &u16DataSize);
//将灰度图数据转换为原始码流数据
unsigned char *raw_data = NULL;
int raw_data_len = 0;
IRC_FrameDeal(data, data_len, &raw_data, &raw_data_len);
//将原始码流数据转换为rgb数据
IRC_FrameDeal(u16Data, u16DataSize, &raw_data, &raw_data_len);
//将原始码流数据写入到编码器 并转换为h264
unsigned char *h264Data = NULL;
... ... @@ -150,6 +159,12 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len
raw_data = NULL;
}
if (u16Data != NULL)
{
free(u16Data);
u16Data = NULL;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ... @@ -373,12 +388,12 @@ static T_JZsdkReturnCode JZC1_MediaInit()
//设置快门为开
JZsdk_Camera_ShutterSwitch(JZ_FLAGCODE_ON);
//设置伪彩颜色
//设置伪彩颜色为hot
int value = 8;
Camera_param(JZ_FLAGCODE_SET, CAMERA_PSEUDO_COLOR, &value);
//设置伪彩模式
value = 1;
//设置为默认输出模式
value = 0;
Camera_param(JZ_FLAGCODE_SET, CAMERA_PIXEL_PSEUDO_COLOR_MODE, &value);
#endif
... ...
... ... @@ -57,10 +57,12 @@ typedef struct IRC_param
//单点校正(Single-Point Correction -> SPC)
double *SPC_Diff; // spc截距数组 即计算得到的增益
double *SPC_Slope; // spc斜率数组 即计算得到的补正
U16_t *SPC_Mark_Data;
unsigned int FirstSPC_flag; //第一次使用spc的标志位
unsigned int SPC_ResetFlag; //spc校准标志位 开启时进行spc校准
U16_t *SPC_Mark_Data; //spc标定帧灰度
unsigned int SPC_mode; //spc模式 0低温画面打档 1手动打档 2定时打档
unsigned int SPC_LastMode; //上一次spc模式
... ... @@ -78,6 +80,12 @@ typedef struct IRC_param
unsigned int FrameCorrectMode; //画面纠正模式 0 无纠正 1 单点纠正 2 两点纠正
// 高低温标定
U16_t *Factory_HighT_Mark_Data; //出厂的高温标定帧灰度
unsigned int Factory_HighT_Mark_Data_flag; //出厂的高温标定帧灰度标志位
U16_t *Factory_LowT_Mark_Data; //出厂的低温标定帧灰度
unsigned int Factory_LowT_Mark_Data_flag; //出厂的高温标定帧灰度标志位
U16_t *HighT_NineFrameAdd; //高温温度判定时的9帧综合数组
U16_t *HighT_NineFrame_Avg; //高温温度判定时的9帧综合数组平均值
unsigned int HighT_flag; //高温判定标志 0~9 0关闭,1~9 为计数
... ...
... ... @@ -727,12 +727,12 @@ T_JZsdkReturnCode IRC_LocalFrame_DataRead(int flag,struct IRC_param *dealInfo)
switch (flag)
{
case HIGH_SD_TEMP:
memcpy(dealInfo->HighT_NineFrame_Avg, numbers, count * sizeof(U16_t));
memcpy(dealInfo->Factory_HighT_Mark_Data, numbers, count * sizeof(U16_t));
JZSDK_LOG_DEBUG("读取高SD温度数据");
break;
case LOW_SD_TEMP:
memcpy(dealInfo->LowT_NineFrame_Avg, numbers, count * sizeof(U16_t));
memcpy(dealInfo->Factory_LowT_Mark_Data, numbers, count * sizeof(U16_t));
JZSDK_LOG_DEBUG("读取低SD温度数据");
break;
... ...
... ... @@ -44,86 +44,66 @@ T_JZsdkReturnCode IRC_ParamInit(int height, int width, int frameRate)
return ret;
}
/*
功能:IRC数据预处理
参数:U8_t *rawData, int dataSize, U16_t **returnData, unsigned int *returnDataSize, struct IRC_param *dealInfo
返回值:T_JZsdkReturnCode
备注:
*/
static T_JZsdkReturnCode IRC_data_PreliminaryDeal(U8_t *rawData , int dataSize, U16_t *returnData, unsigned int *returnDataSize, struct IRC_param *dealInfo)
static T_JZsdkReturnCode IRC_data_PreliminaryDeal(U16_t *rawData ,unsigned int *rawSize, struct IRC_param *dealInfo)
{
T_JZsdkReturnCode ret;
//无图像
if (rawData == NULL || dealInfo == NULL)
{
JZSDK_LOG_ERROR("irc数据预处理失败,参数错误");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//合成像素,u8转换合并成u16
ret = JZsdk_Merge_U8_to_U16_byReverse(rawData, dataSize, returnData, returnDataSize);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS || *returnDataSize != dealInfo->PixelNum)
{
JZSDK_LOG_ERROR("像素合成失败, ret:0x%x dataSize:%d returnDataSize:%d PixelNum:%d", ret, dataSize,*returnDataSize, dealInfo->PixelNum);
return ret;
}
//数据检查
for (int i = 0; i < *returnDataSize; i++)
for (int i = 0; i < *rawSize; i++)
{
if (returnData[i] > dealInfo->ExpectedMax)
if (rawData[i] > dealInfo->ExpectedMax)
{
returnData[i] = dealInfo->ExpectedMax;
rawData[i] = dealInfo->ExpectedMax;
}
}
/*
手动盲点纠正部分
手动盲点纠正默认打开
*/
/*************************************手动盲点部分******************************************************************/
//手动盲点处理
if (dealInfo->BlindNum > 0)
{
JZsdk_CutBadPixel_U16(returnData, dealInfo->Width, dealInfo->Height, dealInfo->Blind, dealInfo->BlindNum,dealInfo->BadPixelExtern, 1);
JZsdk_CutBadPixel_U16(rawData, dealInfo->Width, dealInfo->Height, dealInfo->Blind, dealInfo->BlindNum,dealInfo->BadPixelExtern, 1);
}
/*
自动盲点纠正部分
*/
/*************************************自动盲点部分******************************************************************/
//如果自动盲点纠正已打开
if (dealInfo->AutoBadPixelReset == JZ_FLAGCODE_ON)
{
JZsdk_RawCheckisBadPixel_U16(returnData, dealInfo->Width, dealInfo->Height, dealInfo->BadPixel, &dealInfo->BadPixelNum);
//检查自动盲点的位置
JZsdk_RawCheckisBadPixel_U16(rawData, dealInfo->Width, dealInfo->Height, dealInfo->BadPixel, &dealInfo->BadPixelNum);
//关闭自动盲点校正
dealInfo->AutoBadPixelReset = JZ_FLAGCODE_OFF;
}
//盲元纠正
//如果自动盲点校正已打开
if (dealInfo->AutoBadPixel_flag == JZ_FLAGCODE_ON)
{
JZsdk_CutBadPixel_U16(returnData, dealInfo->Width, dealInfo->Height, dealInfo->BadPixel, dealInfo->BadPixelNum,dealInfo->BadPixelExtern, 1);
//对数据进行自动盲点校正
JZsdk_CutBadPixel_U16(rawData, dealInfo->Width, dealInfo->Height, dealInfo->BadPixel, dealInfo->BadPixelNum,dealInfo->BadPixelExtern, 1);
}
/*
两点纠正部分
*/
//如果开启了低温循环标定
/*************************************两点纠正部分******************************************************************/
//如果开启了低温循环标定,计算低温循环数据
if (dealInfo->LowT_flag != JZ_FLAGCODE_OFF)
{
IRC_LowT_CycleCalibration(returnData, dealInfo);
IRC_LowT_CycleCalibration(rawData, dealInfo);
}
//如果开启了高温循环标定
//如果开启了高温循环标定,计算高温循环数据
if (dealInfo->HighT_flag != JZ_FLAGCODE_OFF)
{
IRC_HighT_CycleCalibration(returnData, dealInfo);
IRC_HighT_CycleCalibration(rawData, dealInfo);
}
/*
单点纠正部分
*/
/*************************************单点纠正部分******************************************************************/
//单点校正spc如果未进行过数据的标定,则进行一次
if (dealInfo->FirstSPC_flag == JZ_FLAGCODE_OFF)
{
... ... @@ -155,7 +135,7 @@ static T_JZsdkReturnCode IRC_data_PreliminaryDeal(U8_t *rawData , int dataSize,
{
JZSDK_LOG_INFO("SPC重置标定");
memcpy(dealInfo->SPC_Mark_Data, returnData, dealInfo->PixelNum * sizeof(U16_t));
memcpy(dealInfo->SPC_Mark_Data, rawData, dealInfo->PixelNum * sizeof(U16_t));
//保存spc标定点
IRC_LocalFrame_DataWrite(SPC_MARK_DATA, dealInfo, (U16_t *)dealInfo->SPC_Mark_Data, dealInfo->PixelNum);
... ... @@ -163,25 +143,8 @@ static T_JZsdkReturnCode IRC_data_PreliminaryDeal(U8_t *rawData , int dataSize,
dealInfo->SPC_ResetFlag = JZ_FLAGCODE_OFF;
}
//备注:这部分使用我们自己的库才要这样做
//如果开启了spc单点校正
if(dealInfo->FrameCorrectMode == IRC_CORRCTION_SPC && dealInfo->DealWay == IRC_DEALMODE_JZSDK)
{
//计算spc参数(后续要改成只计算一次,总不能每帧都计算吧)
if (dealInfo->SPC_mode == 0 && dealInfo->LowT_NineFrame_Avg != NULL)
{
IRC_SPC_ParamCorrect(dealInfo, dealInfo->LowT_NineFrame_Avg);
}
else
{
IRC_SPC_ParamCorrect(dealInfo, dealInfo->SPC_Mark_Data);
}
}
/*************************************气体增强部分,标记气体增图像图像******************************************************************/
/*
气体增强部分
标记气体增图像图像
*/
//如果开启气体增强时,未标记过气体画面,则标记
if (dealInfo->OutputPixelColorMode == 2 && dealInfo->First_DGCE_flag == JZ_FLAGCODE_OFF)
{
... ... @@ -194,14 +157,13 @@ static T_JZsdkReturnCode IRC_data_PreliminaryDeal(U8_t *rawData , int dataSize,
if (dealInfo->DGCE_ResetFlag == JZ_FLAGCODE_ON)
{
JZSDK_LOG_INFO("气体增强重置标定");
memcpy(dealInfo->DGCE_Mark_Data, returnData, dealInfo->PixelNum * sizeof(U16_t));
memcpy(dealInfo->DGCE_Mark_Data, rawData, dealInfo->PixelNum * sizeof(U16_t));
dealInfo->DGCE_ResetFlag = JZ_FLAGCODE_OFF;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
unsigned int Get_2DImage_PointToArray(int x, int y, int width, int height)
{
return (x + y*width);
... ... @@ -398,35 +360,33 @@ static T_JZsdkReturnCode IRC_Postdeal(unsigned char *rgb_data, struct IRC_param
}
/*
功能:IRC 帧处理
参数:
返回值:T_JZsdkReturnCode
备注:
/****************************
*/
T_JZsdkReturnCode IRC_FrameDeal(unsigned char *rawData ,unsigned int dataSize, unsigned char **outData, unsigned int *outDataSize)
{
//1、数据预处理(将红外相机的8位数据,合成为16位数据,移除盲点,并记录标定点)
U16_t *U16_data = (U16_t *)malloc(dataSize/2 * sizeof(U16_t));
unsigned int U16_dataSize = 0;
IRC_data_PreliminaryDeal(rawData , dataSize, U16_data, &U16_dataSize, g_IRC_Param);
功能:IRC 帧处理
参数:
返回值:T_JZsdkReturnCode
备注:
//printf("预处理完成\n");
* *************/
T_JZsdkReturnCode IRC_FrameDeal(U16_t *rawData ,unsigned int dataSize, unsigned char **outData, unsigned int *outDataSize)
{
//1、数据预处理(移除数据的盲点,并记录标定数据)
IRC_data_PreliminaryDeal(rawData , &dataSize, g_IRC_Param);
//2、数据前处理,将原始数据和16位数据 合成为rgb数据
U8_t *RGB_data = NULL;
unsigned int RGB_dataSize = 0;
//选择前处理的方式
switch (g_IRC_Param->DealWay)
{
case IRC_DEALMODE_KTLIB:
KtLib_DataDeal(U16_data, U16_dataSize, &RGB_data, &RGB_dataSize,g_IRC_Param);
KtLib_DataDeal(rawData, dataSize, &RGB_data, &RGB_dataSize,g_IRC_Param);
break;
case IRC_DEALMODE_JZSDK:
JZIrcLib_DataDeal(U16_data, U16_dataSize, &RGB_data, &RGB_dataSize,g_IRC_Param);
JZIrcLib_DataDeal(rawData, dataSize, &RGB_data, &RGB_dataSize,g_IRC_Param);
break;
default:
... ... @@ -434,8 +394,6 @@ T_JZsdkReturnCode IRC_FrameDeal(unsigned char *rawData ,unsigned int dataSize, u
break;
}
//printf("前处理完成\n");
//3、数据后处理,在rgb数据上,进行图像处理
IRC_Postdeal(RGB_data, g_IRC_Param);
... ... @@ -458,7 +416,6 @@ T_JZsdkReturnCode IRC_FrameDeal(unsigned char *rawData ,unsigned int dataSize, u
}
//printf("输出yuv\n");
}
/*****************
... ... @@ -467,18 +424,12 @@ T_JZsdkReturnCode IRC_FrameDeal(unsigned char *rawData ,unsigned int dataSize, u
* 如果码流类型要求为rgb888
*
* **********************/
if (g_IRC_Param->IRC_outPixelMode == PIXEL_MODE_RGB888)
else if (g_IRC_Param->IRC_outPixelMode == PIXEL_MODE_RGB888)
{
*outData = RGB_data;
*outDataSize = g_IRC_Param->Width*g_IRC_Param->Height*3;
}
//5、数据释放
if (U16_data != NULL)
{
JZsdk_Free((void *)U16_data);
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ... @@ -980,7 +931,7 @@ static T_JZsdkReturnCode IRC_Set_HighTempData(struct IRC_param *dealInfo)
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_INFO("外置高温数据录入成功");
return ret;
dealInfo->Factory_HighT_Mark_Data_flag = JZ_FLAGCODE_ON;
}
//失败了录入 本地数据
... ... @@ -989,11 +940,11 @@ static T_JZsdkReturnCode IRC_Set_HighTempData(struct IRC_param *dealInfo)
{
JZSDK_LOG_ERROR("没有本地高温数据数据,打开录入标志");
dealInfo->HighT_flag = JZ_FLAGCODE_ON; //打开录入标志
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
JZSDK_LOG_INFO("本地高温数据录入成功");
else
{
JZSDK_LOG_INFO("本地高温数据录入成功");
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ... @@ -1010,7 +961,7 @@ static T_JZsdkReturnCode IRC_Set_LowTempData(struct IRC_param *dealInfo)
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_INFO("外置低温数据录入成功");
return ret;
dealInfo->Factory_LowT_Mark_Data_flag = JZ_FLAGCODE_ON;
}
//失败了录入 本地数据
... ... @@ -1020,8 +971,10 @@ static T_JZsdkReturnCode IRC_Set_LowTempData(struct IRC_param *dealInfo)
JZSDK_LOG_ERROR("没有本地低温数据数据,打开录入标志");
dealInfo->LowT_flag = JZ_FLAGCODE_ON; //打开录入标志
}
JZSDK_LOG_INFO("本地低温数据录入成功");
else
{
JZSDK_LOG_INFO("本地低温数据录入成功");
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ... @@ -1155,20 +1108,33 @@ static T_JZsdkReturnCode IRC_param_Init(struct IRC_param **index, int height, in
JZSDK_LOG_ERROR("SPC_Mark_Data注册失败");
}
//填入本地高温数据
ret = IRC_Set_HighTempData(IrcDealCfg);
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
IrcDealCfg->Factory_HighT_Mark_Data = (U16_t *)malloc(IrcDealCfg->Height * IrcDealCfg->Width * sizeof(U16_t));
if (IrcDealCfg->Factory_HighT_Mark_Data == NULL)
{
JZSDK_LOG_INFO("本地高温数据 0:%d 1:%d 2:%d", IrcDealCfg->HighT_NineFrame_Avg[2550], IrcDealCfg->HighT_NineFrame_Avg[2551], IrcDealCfg->HighT_NineFrame_Avg[2552]);
JZSDK_LOG_ERROR("Factory_HighT_Mark_Data注册失败");
}
IrcDealCfg->Factory_HighT_Mark_Data_flag = JZ_FLAGCODE_OFF;
//填入低温数据
ret = IRC_Set_LowTempData(IrcDealCfg);
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
IrcDealCfg->Factory_LowT_Mark_Data = (U16_t *)malloc(IrcDealCfg->Height * IrcDealCfg->Width * sizeof(U16_t));
if (IrcDealCfg->Factory_LowT_Mark_Data == NULL)
{
JZSDK_LOG_INFO("本地低温数据 0:%d 1:%d 2:%d", IrcDealCfg->LowT_NineFrame_Avg[2550], IrcDealCfg->LowT_NineFrame_Avg[2551], IrcDealCfg->LowT_NineFrame_Avg[2552]);
JZSDK_LOG_ERROR("Factory_LowT_Mark_Data注册失败");
}
IrcDealCfg->Factory_LowT_Mark_Data_flag = JZ_FLAGCODE_OFF;
/*******************************************************************************************
*
* 加载文件数据
*
*
**********************************************************************************************/
//填入高温数据
IRC_Set_HighTempData(IrcDealCfg);
//填入低温数据
IRC_Set_LowTempData(IrcDealCfg);
//获取markdata的本地数据
ret = IRC_LocalFrame_DataRead(SPC_MARK_DATA, IrcDealCfg);
... ...
... ... @@ -27,7 +27,7 @@ extern "C" {
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode IRC_ParamInit(int height, int width, int frameRate);
T_JZsdkReturnCode IRC_FrameDeal(unsigned char *rawData ,unsigned int dataSize, unsigned char **outData, unsigned int *outDataSize);
T_JZsdkReturnCode IRC_FrameDeal(U16_t *rawData ,unsigned int dataSize, unsigned char **outData, unsigned int *outDataSize);
T_JZsdkReturnCode IRC_SetRawPixel_ResetFlag();
T_JZsdkReturnCode IRC_SetGrayPixel_ResetFlag();
... ...
... ... @@ -501,9 +501,43 @@ static T_JZsdkReturnCode JZIrcLib_SPC(U16_t *ImageData,struct IRC_param *dealInf
}
}
//JZSDK_LOG_INFO("单点校正");
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/*******************
*
* 单点校正斜率计算
*
*
* *******************/
static T_JZsdkReturnCode JZIrcLib_SPC_Slope_Calculation(struct IRC_param *dealInfo)
{
if (dealInfo->SPC_mode == 0)
{
//采用出厂模式的斜率
if (dealInfo->TPC_mode == 0 && dealInfo->Factory_LowT_Mark_Data != NULL)
{
IRC_SPC_ParamCorrect(dealInfo, dealInfo->Factory_LowT_Mark_Data);
}
//采用手动模式的斜率
else if (dealInfo->TPC_mode == 1 && dealInfo->LowT_NineFrame_Avg != NULL)
{
IRC_SPC_ParamCorrect(dealInfo, dealInfo->LowT_NineFrame_Avg);
}
//都不满足的情况下,采用默认的斜率
else
{
IRC_SPC_ParamCorrect(dealInfo, dealInfo->SPC_Mark_Data);
}
}
//都不满足的情况下,采用默认的斜率
else
{
IRC_SPC_ParamCorrect(dealInfo, dealInfo->SPC_Mark_Data);
}
}
/******
*
... ... @@ -519,6 +553,39 @@ T_JZsdkReturnCode JZIrcLib_TPC(U16_t *ImageData,struct IRC_param *dealInfo)
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
// 应用两点校正公式
for (int i = 0; i < dealInfo->PixelNum; i++)
{
ImageData[i] = (int)(dealInfo->TPC_Slope[i] * ImageData[i] + dealInfo->TPC_Diff[i]);
if (ImageData[i] < 0)
{
ImageData[i] = 0;
}
else if (ImageData[i] > dealInfo->ExpectedMax)
{
ImageData[i] = dealInfo->ExpectedMax;
}
}
//JZSDK_LOG_INFO("两点校正");
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; // 返回校正后的灰度数组
}
/*******************
*
* 两点校正斜率计算
*
*
* *******************/
static T_JZsdkReturnCode JZIrcLib_TPC_Slope_Calculation(struct IRC_param *dealInfo)
{
//无图像
if (dealInfo == NULL)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
// 如果tpc的斜率和tpc的截距都为0,重新计算斜率与斜距
int allZeroSlope_flag = 1, allZeroDiff_flag = 1;
for (int i = 0; i < dealInfo->PixelNum; i++)
... ... @@ -527,7 +594,9 @@ T_JZsdkReturnCode JZIrcLib_TPC(U16_t *ImageData,struct IRC_param *dealInfo)
{
allZeroSlope_flag = 0;
}
if (dealInfo->TPC_Diff[i] != 0) {
if (dealInfo->TPC_Diff[i] != 0)
{
allZeroDiff_flag = 0;
}
}
... ... @@ -559,26 +628,8 @@ T_JZsdkReturnCode JZIrcLib_TPC(U16_t *ImageData,struct IRC_param *dealInfo)
dealInfo->TPC_Diff[i] = AvgSingleFrame_LowT - dealInfo->TPC_Slope[i] * dealInfo->LowT_NineFrame_Avg[i];
}
}
// 应用两点校正公式
for (int i = 0; i < dealInfo->PixelNum; i++)
{
ImageData[i] = (int)(dealInfo->TPC_Slope[i] * ImageData[i] + dealInfo->TPC_Diff[i]);
if (ImageData[i] < 0)
{
ImageData[i] = 0;
}
else if (ImageData[i] > dealInfo->ExpectedMax)
{
ImageData[i] = dealInfo->ExpectedMax;
}
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; // 返回校正后的灰度数组
}
/*计算直方图均衡化并转换为8位灰度值
U16_t in_str 输入的数据
int in_str_len 输入的数据长度
... ... @@ -780,19 +831,36 @@ T_JZsdkReturnCode JZIrcLib_DataDeal(U16_t* U16_data, unsigned int U16_dataSize,
//如果打开了单点纠正模式
if (dealInfo->FrameCorrectMode == IRC_CORRCTION_SPC)
{
JZIrcLib_SPC(u16_CorrentData, dealInfo);
//计算单点校正的斜率
JZIrcLib_SPC_Slope_Calculation(dealInfo);
//通过斜率进行单点校正
ret = JZIrcLib_SPC(u16_CorrentData, dealInfo);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("两点校正失败");
}
}
// 如果打开了两点校正
if (dealInfo->FrameCorrectMode == IRC_CORRCTION_TPC)
{
JZIrcLib_TPC(u16_CorrentData, dealInfo);
//计算两点校正的斜率
JZIrcLib_TPC_Slope_Calculation(dealInfo);
//对数据进行两点校正
ret = JZIrcLib_TPC(u16_CorrentData, dealInfo);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("两点校正失败");
}
}
U8_t *GrayImage = NULL;
int GrayImageLen = 0;
//直方图
//直方图均衡化
JZIrcLib_vKT(u16_CorrentData, &GrayImage, &GrayImageLen, dealInfo);
//图像输出模式
... ...
... ... @@ -26,12 +26,12 @@ extern "C" {
typedef enum CameraParam
{
CAMERA_PSEUDO_COLOR = 0x000001,
CAMERA_PIXEL_PSEUDO_COLOR_MODE = 0x000002,
CAMERA_REGION_BOX = 0x000003,
CAMERA_CORRCTION_MODE = 0x000004,
CAMERA_GAS_ENHANCEMENT_COLOR = 0x000005,
CAMERA_GAS_ENHANCEMENT_CORRCTION = 0x000006,
CAMERA_PSEUDO_COLOR = 0x000001, //伪彩色
CAMERA_PIXEL_PSEUDO_COLOR_MODE = 0x000002, //像素输出模式
CAMERA_REGION_BOX = 0x000003, //区域框
CAMERA_CORRCTION_MODE = 0x000004, //纠正模式
CAMERA_GAS_ENHANCEMENT_COLOR = 0x000005, //气体增强颜色
CAMERA_GAS_ENHANCEMENT_CORRCTION = 0x000006, //气体增强纠正
}CameraParam;
... ...
... ... @@ -191,7 +191,7 @@ int32_t s_widgetValueList[] = {VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST, //视频
OFF, //测温模式
ON, //光圈开关
OFF, //冻结开关
1, //色彩输出模式
0, //色彩输出模式
OFF, //画面放大
OFF, //打档
8, //伪彩颜色
... ...