RGB和HSV相互转化

#include <stdio.h>

#define Max(a, b, c) (a) > (b)? ((a) > (c)? (a) : (c)) : ((b) > (c) ? (b):(c))
#define Min(a, b, c) (a) < (b)?((a) < (c)?(a):(c)) : ((b) < (c)?(b):(c))

typedef struct{
   
   
 unsigned char R;
 unsigned char G;
 unsigned char B;
}COLOR_RGB;

typedef struct{
   
   
 float H;
 float S;
 float V;
}COLOR_HSV;




//rgb TO 	hsv
void RGB_TO_HSV(const COLOR_RGB *input,COLOR_HSV *output)
{
   
   
	float r,g,b,minRGB,maxRGB,deltaRGB;
	r = input->R/255.0f;	
	g = input->G/255.0f;
	b = input->B/255.0f;
	minRGB = Min(r,g,b);
	maxRGB = Max(r,g,b);
	deltaRGB = maxRGB - minRGB;

	if(maxRGB != 0.0)
		output
在Python中,RGB(红绿蓝)HSV(色调、饱度、值)都是颜色模型,用于表示颜色的不同方面。RGB是一种设备依赖的颜色空间,而HSV更偏向于人类视觉感知的颜色描述。以下是简单的Python代码,展示了如何实现RGBHSVHSVRGB转换: ### RGB to HSV ```python import math def rgb_to_hsv(r, g, b): r, g, b = r / 255.0, g / 255.0, b / 255.0 max_c = max(r, g, b) min_c = min(r, g, b) v = max_c if min_c == max_c: h = s = 0 # achromatic (gray) else: delta = max_c - min_c s = delta / max_c if r == max_c: h = (g - b) / delta + (6 if g < b else 0) elif g == max_c: h = (b - r) / delta + 2 else: h = (r - g) / delta + 4 h *= 60 # convert to degrees h %= 360 # ensure hue is in the range [0, 360] return int(h), int(s * 100), int(v * 100) # return as a tuple with percent values # 示例 rgb_tuple = (255, 0, 0) # 红色 hsv_tuple = rgb_to_hsv(*rgb_tuple) print(f"RGB: {rgb_tuple} -> HSV: {hsv_tuple}") ``` ### HSV to RGB ```python def hsv_to_rgb(h, s, v): c = v * s x = c * (1 - abs((h / 60) % 2 - 1)) m = v - c def get_color_value(hue): if hue < 0: hue += 6 if hue >= 6: hue -= 6 if hue == 0: return (c, x, 0) elif hue == 1: return (x, c, 0) elif hue == 2: return (0, c, x) elif hue == 3: return (0, x, c) elif hue == 4: return (x, 0, c) else: return (c, 0, x) r, g, b = get_color_value(h) return int((r + m) * 255), int((g + m) * 255), int((b + m) * 255) # 示例 hsv_tuple = (0, 100, 100) # 完全饱的红色 rgb_tuple = hsv_to_rgb(*hsv_tuple) print(f"HSV: {hsv_tuple} -> RGB: {rgb_tuple}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值