python实现grb和hsv转换

python实现grb和hsv转换,第1张

这个输出整数还是小数,估计输出整数就可以,如果希望输出浮点数,可以将round去掉。

import math

def hsv2rgb(h, s, v):

    h = float(h)

    s = float(s)

    v = float(v)

    h60 = h / 60.0

    h60f = math.floor(h60)

    hi = int(h60f) % 6

    f = h60 - h60f

    p = v * (1 - 岁顷s)

    q = v * (1 - f * s)

    t = v * (1 - (1 - f) * s)

    r, g, b = 0, 0, 0

    if hi == 0: r, g, b = v, t, p

    elif hi == 1: r, g, b = q, v, p

    elif hi == 2: r, g, b = p, v, t

    elif hi == 3: r, g, b = p, q, v

    elif hi == 4: r, g, b = t, p, v

    elif hi == 5: r, g, b = v, p, q

    r, g, b = int(r * 255), int(g * 255), int(b * 255)

    return r, g, b

def rgb2hsv(r, g, b):

    r, g, b = r/255.0, g/255.0, b/255.0

    mx = max(r, g, b)

 此核   mn = min(r, g, b)

    df = mx-mn

    if mx == mn:

        h = 0

    elif mx == r:

        h = (60 * ((g-b)/df) + 360) % 360

    elif mx == g:

        h = (60 * ((b-r)/df) + 120) % 360

    elif mx == b:

        h = (60 * ((r-g)/df) + 240) % 360

    if mx == 0:

        s = 0

    else:

        s = df/mx

    v = mx

    return h, s, v

    

    

if __name__=="__main__":

    fp=open("1.txt","w")

    for line in open("乎扒陆rgb2hsv.txt",'r'):

        r,g,b = map(int,line.split(','))

        h,s,v = rgb2hsv(r,g,b)

        fp.write("%d,%d,%d\n"%(round(h),round(s),round(v)))

        

    fp.close()

opencv中的H分量悉慧范围是 0~180, S分量是0~255, V分量是0~255

但是HSV颜色空间却规定的是,H范围0~360,S范围0~1,举核V范围0~1

所以你需要自己转换一下,H*2,睁答答V/255,S/255

您可以使用MATLAB中的rgb2hsv函数将帆蚂RGB颜色空间转换为HSV颜色空间,然后使用scatter3函数绘制3D散点图来显示HSI颜色空间。具体步骤如下:

首先,生成一个包斗轿丛含各种颜色的RGB矩阵,例如:

r = linspace(0, 1, 50)

g = linspace(0, 1, 50)

b = linspace(0, 1, 50)

[R,G,B] = meshgrid(r,g,b)

rgbImage = cat(4,R,G,B)

然后,使用rgb2hsv函数将RGB矩阵转换为HSV矩阵

hsvImage = rgb2hsv(rgbImage)

H = hsvImage(:,:,:,1)

S = hsvImage(:,:,:,2)

V = hsvImage(:,:,:,3)

最后,使用scatter3函数绘制HSI颜色空间的图形:

figure

scatter3(H(:), S(:), V(:), 10, [H(:) S(:) V(:)], 'filled')

xlabel('H')

ylabel('S')

zlabel('V')

title('HSI Colorspace')

这将产生一个3D散点图,其中x轴表示色相H,y轴表示饱和度S,z轴表示亮度V,每个空樱点的颜色对应其在HSI颜色空间中的位置。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12352458.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存