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

📄 mycolorspace.h

📁 这是一个分水岭程序
💻 H
字号:
// MyColorSpace.h: interface for the MyColorSpace class.
// 04.05;
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_MYCOLORSPACE_H__88292E4A_088A_45EB_8DCF_38694FB6190F__INCLUDED_)
#define AFX_MYCOLORSPACE_H__88292E4A_088A_45EB_8DCF_38694FB6190F__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "mymath.h"

#define  PI 3.14159265359

typedef struct tagMyRGB{
	FLOAT r;
	FLOAT g;
	FLOAT b;
}MyRGB;	

typedef struct tagMyHSV{
	FLOAT h;
	FLOAT s;
	FLOAT v;
}MyHSV;	

typedef struct tagMyLUV{
	FLOAT l;
	FLOAT u;
	FLOAT v;
}MyLUV;	

//一维直方图单元;
typedef struct tagD1ColorBinUnit{
	MyHSV  hsv;
	FLOAT count;
}D1ColorBinUnit;

//一维直方图;
typedef struct tagD1ColorBin{
	D1ColorBinUnit*  binunits;
	INT bincount;//直方图中BIN数;
}D1ColorBin;


typedef struct tagHsvBelongTo{
	MyHSV hsv;
	INT belongto;
}HsvBelongTo;

//直方图BIN数;
#define CBDIM 72

class MyColorSpace  
{
public:
	MyColorSpace();
	virtual ~MyColorSpace();

	BOOL Rgb2Hsi(FLOAT r, FLOAT g, FLOAT b, FLOAT& h, FLOAT& s, FLOAT& i);//冈萨雷斯《数字图像处理》第二版,p235-p237;
	BOOL Hsi2Rgb(FLOAT h, FLOAT s, FLOAT i, FLOAT& r, FLOAT& g, FLOAT& b);//冈萨雷斯《数字图像处理》第二版,p237;
	BOOL Rgb2Ycbcr(FLOAT r, FLOAT g, FLOAT b, FLOAT& y, FLOAT& cb, FLOAT& cr);//据《Color and Texture Descriptors》by B.S.Manjunath,eg.
	BOOL Ycbcr2Rgb(FLOAT y, FLOAT cb, FLOAT cr, FLOAT& r, FLOAT& g, FLOAT& b);//Rec 601-1 YCbCr to RGB, 根据David Bourgin, Color space FAQ
	BOOL Rgb2Hsv(FLOAT r, FLOAT g, FLOAT b, FLOAT& h, FLOAT& s, FLOAT& v);//据《Color and Texture Descriptors》by B.S.Manjunath,eg.
	BOOL Rgb2Hsv2(FLOAT r, FLOAT g, FLOAT b, FLOAT& h, FLOAT& s, FLOAT& v);//姚子程序中的转换,和上面书中的的不一样???
	DOUBLE GetHsvDistance(MyHSV x, MyHSV y);
	//BOOL Luv2Rgb(FLOAT r, FLOAT g, FLOAT b, FLOAT& l, FLOAT& u, FLOAT& v);
	BOOL Rgb2Xyz(FLOAT r, FLOAT g, FLOAT b, FLOAT& x, FLOAT& y, FLOAT& z);//RGB to CIE XYZitu(D65),根据David Bourgin, Color space FAQ
	BOOL Xyz2Rgb(FLOAT x, FLOAT y, FLOAT z, FLOAT& r, FLOAT& g, FLOAT& b);//CIE XYZitu(D65) to RGB,根据David Bourgin, Color space FAQ
	BOOL Xyz2Luv(FLOAT x, FLOAT y, FLOAT z, FLOAT& l, FLOAT& u, FLOAT& v);//CIE XYZitu(D65) to CIE Luv,根据David Bourgin, Color space FAQ
	BOOL Xyz2Lab(FLOAT x, FLOAT y, FLOAT z, FLOAT& l, FLOAT& a, FLOAT& b);//CIE XYZitu(D65) to CIE Lab, 根据David Bourgin, Color space FAQ
	BOOL Lab2Lch(FLOAT li, FLOAT a, FLOAT b, FLOAT& lo, FLOAT& c, FLOAT& h);//CIE Lab to CIE LCH, 根据David Bourgin, Color space FAQ

	BOOL RgbtoHsv(BYTE* inDatas, int width, int height, MyHSV* hsvbuff);//将位图图像数据转换为HSV数据;
	BOOL RgbtoXyz(BYTE* inDatas, int width, int height, FLOAT* xyzbuff);//将位图图像数据转换为HSI数据;
	BOOL XyztoRgb(FLOAT* xyzDatas, int width, int height, BYTE* rgbDatas);
	BOOL RgbtoLuv(BYTE* inDatas, int width, int height, MyLUV* luvbuff);//将位图图像数据转换为LUV数据;

	BOOL RgbtoLuvPcm(BYTE* inDatas, int width, int height, MyLUV* luvbuff);//基于表转换,将位图图像数据转换为LUV数据;

	BOOL Luv2Rgb(FLOAT l, FLOAT u, FLOAT v, INT& r, INT& g, INT& b);//LUV to RGB;
	BOOL LuvToRgb(FLOAT* luvData, INT width, INT height, BYTE* rgbData);

private:
	MyMath myMath;
	FLOAT Labf(FLOAT input, FLOAT Y_Yn);//用于计算Lab色彩;
};

#endif // !defined(AFX_MYCOLORSPACE_H__88292E4A_088A_45EB_8DCF_38694FB6190F__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -