回复内容:
补充一下MATLAB的代码:
t = ( 0 :. 02 : 2 ) * pi ; r = 0 :. 02 : 1 ; pcolor ( cos ( t ) '* r , sin ( t ) '* r , t '* ( r == r )) colormap ( hsv ( 256 )), shading interp , axis image off...被抢先了...
基本上就是在这个圆上颜色的色相(Hue),只与该点与圆心连线的夹角有关。知道这一点你就做一幅图像,然后遍历每一个点,把该点的坐标值 转换为极坐标 ,色相值就是极坐标角度 。
用 matplotlib 实现的话有个小技巧,把imshow的cmap改为hsv就可以直接按照色相来画。
# -*- coding:utf-8 -*- from pylab import * center = ( 250 , 250 ) radius = 250 img = zeros (( 500 , 500 )) for i in range ( 500 ): for j in range ( 500 ): x = i - center [ 0 ] * 1.0 y = j - center [ 1 ] * 1.0 if x ** 2 + y ** 2 radius ** 2 : if x > 0 : img [ i , j ] = arctan ( y / x ) elif x 0 and y >= 0 : img [ i , j ] = arctan ( y / x ) + pi elif x 0 and y 0 : img [ i , j ] = arctan ( y / x ) - pi elif x == 0 and y > 0 : img [ i , j ] = pi / 2 elif x == 0 and y 0 : img [ i , j ] = pi / - 2 elif x == 0 and y == 0 : img [ i , j ] = 0.0 print img imshow ( img , cmap = cm . hsv ) show ()改编自@冯昱尧的代码
from pylab import * n = 300 img = [[ arctan2 ( x , y ) if x * x + y * y n * n else 0 for y in range ( - n , n )] for x in range ( - n , n )] imshow ( img , cmap = cm . hsv ) show ()如果根据这幅图,“光盘”的意思就是每一条半径的颜色在色相Hue上渐变。
关于色相是什么(反正这里说的不是可以用来牺牲的那个色相了),可以参看Wiki:HSL和HSV色彩空间 ,那个H就是色相Hue。
有点像下面这幅图的横截面(摘自Wiki)
只不过明度Chroma没有变化。 只不过明度Chroma没有变化。
这样的话,蛮简单的啊。对每个像素算出它所在半径的角度 0~2π 然后映射到Hue的值域上就是了。
具体实现的话,话说可以用OpenCV吗?反正一些图像库里面是有HSR到RGB的转换函数的。
(我一直都不明白所谓邀请是怎么回事,以及为什么大家都爱说谢邀) 补充一下Mathematica代码
n=300; c=Hue[i/n]; Graphics@Table[{c,EdgeForm@c,Disk[{0,0},1,2Pi/n{i-1,i}]},{i,n}]期待mma的代码,估计一条语句搞定
查看更多关于如何用简单的算法生成一个类似『光盘』的彩色圆形图片?的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did83217