How to make conversion between RGB and HSV? [Python sourcecode]
2008-09-24 20:04
435 查看
I get following codes from a Japanese Ghost's Blog, so I neglect the original URL for my hate of them.
RGB => HSV
def RGB2HSV( r, g, b ): r, g, b = map( float, (r,g,b ) ) if r == g and g == b: ma = r mi = r h = 0 v = r elif r > g and r > b: ma = r mi = min( g , b ) h = 60 * ( g - b ) / ( ma - mi ) + 0 elif g > b and g >= r: ma = g mi = min( b , r ) h = 60 * ( b - r ) / ( ma - mi ) + 120 elif b >= r and b >= g: ma = b mi = min( r , g ) h = 60 * ( r - g ) / ( ma - mi ) + 240 else: print "Error."
if ma == 0: return 0, 0, 0 s = (ma - mi) / ma v = ma
return h, s, v
HSV => RGB
def HSV2RGB( h, s, v ): hi = int(h / 60) % 6 f = h / 60 - hi p = v * ( 1 - s ) q = v * ( 1 - f * s ) t = v * ( 1 - ( 1 - f ) * s )
if hi == 0: r = int(round( v )) g = int(round( t )) b = int(round( p )) elif hi == 1: r = int(round( q )) g = int(round( v )) b = int(round( p )) elif hi == 2: r = int(round( p )) g = int(round( v )) b = int(round( t )) elif hi == 3: r = int(round( p )) g = int(round( q )) b = int(round( v )) elif hi == 4: r = int(round( t )) g = int(round( p )) b = int(round( v )) elif hi == 5: r = int(round( v )) g = int(round( p )) b = int(round( q )) return r, g, b
RGB => HSV
def RGB2HSV( r, g, b ): r, g, b = map( float, (r,g,b ) ) if r == g and g == b: ma = r mi = r h = 0 v = r elif r > g and r > b: ma = r mi = min( g , b ) h = 60 * ( g - b ) / ( ma - mi ) + 0 elif g > b and g >= r: ma = g mi = min( b , r ) h = 60 * ( b - r ) / ( ma - mi ) + 120 elif b >= r and b >= g: ma = b mi = min( r , g ) h = 60 * ( r - g ) / ( ma - mi ) + 240 else: print "Error."
if ma == 0: return 0, 0, 0 s = (ma - mi) / ma v = ma
return h, s, v
HSV => RGB
def HSV2RGB( h, s, v ): hi = int(h / 60) % 6 f = h / 60 - hi p = v * ( 1 - s ) q = v * ( 1 - f * s ) t = v * ( 1 - ( 1 - f ) * s )
if hi == 0: r = int(round( v )) g = int(round( t )) b = int(round( p )) elif hi == 1: r = int(round( q )) g = int(round( v )) b = int(round( p )) elif hi == 2: r = int(round( p )) g = int(round( v )) b = int(round( t )) elif hi == 3: r = int(round( p )) g = int(round( q )) b = int(round( v )) elif hi == 4: r = int(round( t )) g = int(round( p )) b = int(round( v )) elif hi == 5: r = int(round( v )) g = int(round( p )) b = int(round( q )) return r, g, b
相关文章推荐
- How to make conversion between RGB and HSV? [Python sourcecode]
- How RGB is related to HSV, and how to implement hue shifting on the iPhone
- Matrix to convert between HSV and RGB
- How to share memory between services and user processes?
- Matrix to convert between HSL and RGB
- How to choose between zombie.js and PhantomJS for automated web testing? [closed]
- [zz]How to use *args and **kwargs in Python
- how to make vim show ^M and substitute it
- [monitoring] how to create script to monitoring the status of orders and make graphs
- How to configure transparent bridge between SCCP and SIP VoIP systems.
- Collisions and Collectables: How To Make a Tile Based Game with Cocos2D Part 2
- How to make BBED(Oracle Block Brower and EDitor Tool) on Unix/Linux/Windows
- How to install Python 2.7 and Python 3.3 on CentOS 6
- View and Data API Tips: how to make viewer full screen
- How-to: make spark streaming collect data from Kafka topics and store data into hdfs
- How to make Windows Form app truly Full Screen (and to hide Taskbar) in C#? 转
- How to copy all view private files and Derived objects between views
- How to use *args and **kwargs in Python
- How to share files between Mac and Windows
- Cmake environmental variables: how to make find_package, find_path and find_library work