⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 colorlimit.cpp

📁 比赛足球机器人系统中的DCT追球程序
💻 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 + -