Hello Mat

 找回密码
 立即注册
查看: 4830|回复: 0

HSV与RGB相互转化

[复制链接]

1294

主题

1520

帖子

110

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22633
发表于 2017-2-4 21:56:10 | 显示全部楼层 |阅读模式
HSV —> RGB
  1. if ( S == 0 )                       //HSV from 0 to 1
  2. {
  3.    R = V * 255
  4.    G = V * 255
  5.    B = V * 255
  6. }
  7. else
  8. {
  9.    var_h = H * 6
  10.    if ( var_h == 6 ) var_h = 0      //H must be < 1
  11.    var_i = int( var_h )             //Or ... var_i = floor( var_h )
  12.    var_1 = V * ( 1 - S )
  13.    var_2 = V * ( 1 - S * ( var_h - var_i ) )
  14.    var_3 = V * ( 1 - S * ( 1 - ( var_h - var_i ) ) )

  15.    if      ( var_i == 0 ) { var_r = V     ; var_g = var_3 ; var_b = var_1 }
  16.    else if ( var_i == 1 ) { var_r = var_2 ; var_g = V     ; var_b = var_1 }
  17.    else if ( var_i == 2 ) { var_r = var_1 ; var_g = V     ; var_b = var_3 }
  18.    else if ( var_i == 3 ) { var_r = var_1 ; var_g = var_2 ; var_b = V     }
  19.    else if ( var_i == 4 ) { var_r = var_3 ; var_g = var_1 ; var_b = V     }
  20.    else                   { var_r = V     ; var_g = var_1 ; var_b = var_2 }

  21.    R = var_r * 255                  //RGB results from 0 to 255
  22.    G = var_g * 255
  23.    B = var_b * 255
  24. }
复制代码

RGB —> HSV
  1. var_R = ( R / 255 )                     //RGB from 0 to 255
  2. var_G = ( G / 255 )
  3. var_B = ( B / 255 )

  4. var_Min = min( var_R, var_G, var_B )    //Min. value of RGB
  5. var_Max = max( var_R, var_G, var_B )    //Max. value of RGB
  6. del_Max = var_Max - var_Min             //Delta RGB value

  7. V = var_Max

  8. if ( del_Max == 0 )                     //This is a gray, no chroma...
  9. {
  10.    H = 0                                //HSV results from 0 to 1
  11.    S = 0
  12. }
  13. else                                    //Chromatic data...
  14. {
  15.    S = del_Max / var_Max

  16.    del_R = ( ( ( var_Max - var_R ) / 6 ) + ( del_Max / 2 ) ) / del_Max
  17.    del_G = ( ( ( var_Max - var_G ) / 6 ) + ( del_Max / 2 ) ) / del_Max
  18.    del_B = ( ( ( var_Max - var_B ) / 6 ) + ( del_Max / 2 ) ) / del_Max

  19.    if      ( var_R == var_Max ) H = del_B - del_G
  20.    else if ( var_G == var_Max ) H = ( 1 / 3 ) + del_R - del_B
  21.    else if ( var_B == var_Max ) H = ( 2 / 3 ) + del_G - del_R

  22.    if ( H < 0 ) H += 1
  23.    if ( H > 1 ) H -= 1
  24. }
复制代码


算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-4-19 14:03 , Processed in 0.258464 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表