📄 colorlimit.cpp
字号:
/*
* Copyright (c) 2005-2006,华南理工大学机器人实验室
* All rights reserved.
*
* 文件名称:colorLimit.cpp
* 文件标识:
* 摘 要:颜色阀值类的实现
*
* 当前版本:1.0
* 作 者:孙广成
* 完成日期:
*
* 取代版本:
* 作 者:
* 完成日期:
*/
#include "StdAfx.h"
#include "colorLimit.h"
#define MIN(a,b) (a<b?a:b)
#define MAX(a,b) (a>b?a:b)
//#define FALSE 0
//#define TRUE 1
ColorLimit::ColorLimit(void)
{
m_IsLoad = FALSE;
for(int i=0;i<3;i++)
for(int j=0;j<8;j++) {
limit[i][j].m_Hmax=0;
limit[i][j].m_Hmin=0;
limit[i][j].m_Smax=0;
limit[i][j].m_Smin=0;
limit[i][j].m_Imax=0;
limit[i][j].m_Imin=0;
}
//m_parseXml.Initialize();
}
ColorLimit::~ColorLimit(void)
{
}
bool ColorLimit::LoadConfig(const char* FileName)
{
FILE *in;
// Open options file
in = fopen(FileName,"r");
if(!in)
return(false);
int i,j,n=0;
char buf[200];
m_IsLoad=true;
//temp
struct HSILimit tempLimit[3][COLOR_NUMBER];
for(i=0;i<3;i++)
for(j=0;j<8;j++) {
fgets(buf,200,in);
n = sscanf(buf,"(%d,%d)(%d,%d)(%d,%d)",
&(tempLimit[i][j].m_Hmin),&(tempLimit[i][j].m_Hmax),
&(tempLimit[i][j].m_Smin),&(tempLimit[i][j].m_Smax),
&(tempLimit[i][j].m_Imin),&(tempLimit[i][j].m_Imax));
if(n!=6)
m_IsLoad=false;
}
if(m_IsLoad) {
for(i=0;i<3;i++)
for(j=0;j<8;j++) {
limit[i][j].m_Hmin=tempLimit[i][j].m_Hmin;
limit[i][j].m_Hmax=tempLimit[i][j].m_Hmax;
limit[i][j].m_Smin=tempLimit[i][j].m_Smin;
limit[i][j].m_Smax=tempLimit[i][j].m_Smax;
limit[i][j].m_Imin=tempLimit[i][j].m_Imin;
limit[i][j].m_Imax=tempLimit[i][j].m_Imax;
}
return true;
}
return false;
}
bool ColorLimit::SaveConfig(const char* FileName)
{
FILE *out;
// Open options file
out = fopen(FileName,"w");
if(!out)
return(false);
for(int i=0;i<3;i++)
for(int j=0;j<8;j++)
fprintf(out,"(%d,%d)(%d,%d)(%d,%d)\n",
(limit[i][j].m_Hmin),(limit[i][j].m_Hmax),
(limit[i][j].m_Smin),(limit[i][j].m_Smax),
(limit[i][j].m_Imin),(limit[i][j].m_Imax));
fclose(out);
return true;
}
/*
//如果是整一帧画面都是同一个颜色,返回h=-1
void ColorLimit::RGB2HSI(BYTE r,BYTE g,BYTE b,short *h, short *s,short *i)
{
BYTE max=MAX(r,MAX(g,b));
BYTE min=MIN(r,MIN(g,b));
float delta =(float)(max - min);
float _h = 0;
//calculate i [0 255]
*i = (short)max;
//calculate s [0 256]
*s=(short)(256 * delta / (float)max);
//calculate h [0 360]
if(r == max)
_h = (float)(g-b)/delta;
else if(g == max)
_h = 2 + (float)(b-r)/delta;
else if(b == max)
_h = 4+(r-g)/delta;
*h = (short)( _h * 60.0);
if(*h < 0)
*h +=360;
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -