0


Python复现颜色图绘制大赛的作品

Python复现颜色图绘制大赛的作品

受slandarer大佬启发,自己用Python复现了一下七年前的一个颜色图绘图大赛的一些作品。把复现过程记录如下:
在这里插入图片描述
这场比赛居然已经是七年前的事情了,大佬A Frayed Knot在StackExchange
上发起了挑战,举办了名为“Tweetable数学艺术”的比赛(实际上活动整整进行了一年半)

比赛规则如下:

使用C++代码或格式与C++类似的代码,使用不多于140个字符,通过输入x,y坐标输出R,G,B颜色值的形式构造函数,并生成一张1024x1024大小的图片。

挑战发起者给出了的一个基础示例:

/* RED */
    return i&&j?(i%j)&(j%i):0;
/* GREEN */
    return i&&j?(i%j)+(j%i):0;
/* BLUE */
    return i&&j?(i%j)|(j%i):0;

在这里插入图片描述
但这个我拿c++和Python跑了一遍发现效果与之有差异,估计是有写错的地方或者C++各种版本不同格式转换的特性,期待大家的指出。我将其改写为python版本:

导入工具包

import cv2
import numpy as np
#导入python绘图matplotlibimport matplotlib.pyplot as plt
#使用ipython的魔法方法,将绘制出的图像直接嵌入在notebook单元格中%matplotlib inline
#定义可视化图像函数deflook_img(img):'''opencv读入图像格式为BGR,matplotlib可视化格式为RGB,因此需将BGR转RGB'''try:#显示彩图
        img_RGB = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
        plt.imshow(img_RGB)
        plt.show()except:#显示灰度图或黑白图
        plt.imshow(img,cmap="gray")#plt.axis('off')
        plt.show()

颜色图1

h =1024
w =1024
img =255* np.ones((h ,w ,3), dtype=np.uint8)#生成一张1024*1024像素的白图for i inrange(h):# 循环遍历所有像素点,替换像素点for j inrange(w):        
        img[i,j,2]=((i%j)&(j%i))&255if(i&j)else0
        img[i,j,1]=((i%j)+(j%i))&255if(i&j)else0
        img[i,j,0]=((i%j)|(j%i))&255if(i&j)else0
 
look_img(img)

在这里插入图片描述

同时自己也做了一些尝试,发现若是将代码微调,其结果也非常有意思:以下是改写版:

颜色图2

h =1024
w =1024
img =255* np.ones((h ,w ,3), dtype=np.uint8)#生成一张1024*1024像素的白图for i inrange(h):# 循环遍历所有像素点,替换像素点for j inrange(w):        
        img[i,j,2]=((i%j)&(j%i))&200if(i&j)else0
        img[i,j,1]=((i%j)+(j%i))&200if(i&j)else0
        img[i,j,0]=((i%j)|(j%i))&200if(i&j)else0
 
look_img(img)

在这里插入图片描述

颜色图3

h =1024
w =1024
img =255* np.ones((h ,w ,3), dtype=np.uint8)#生成一张1024*1024像素的白图for i inrange(h):# 循环遍历所有像素点,替换像素点for j inrange(w):        
        img[i,j,2]=((i%j)&(j%i))&255if(i&j)else0
        img[i,j,1]=((i%j)^(j%i))&255if(i&j)else0
        img[i,j,0]=((i%j)|(j%i))&255if(i&j)else0
 
look_img(img)

在这里插入图片描述

颜色图4

trichoplax大佬——方格布

正常方格布:

h =1024
w =1024
img =255* np.ones((h ,w ,3), dtype=np.uint8)#生成一张1024*1024像素的白图
DIM=1024for i inrange(h):# 循环遍历所有像素点,替换像素点for j inrange(w):
        s=3./(j+99)        
        img[i,j,2]=(round((i+DIM)*s+j*s)%2+round((DIM*2-i)*s+j*s)%2)*127
        img[i,j,1]=(round((i+DIM)*s+j*s)%2+round((DIM*2-i)*s+j*s)%2)*127
        img[i,j,0]=(round((i+DIM)*s+j*s)%2+round((DIM*2-i)*s+j*s)%2)*127
 
look_img(img)

在这里插入图片描述

颜色图5

扭曲并添加颜色:

h =1024
w =1024
img =255* np.ones((h ,w ,3), dtype=np.uint8)#生成一张1024*1024像素的白图
DIM=1024for i inrange(h):# 循环遍历所有像素点,替换像素点for j inrange(w):
        s=3./(j+99)
        y=(j+np.sin((i*i+(j-700)**2*5)/100./DIM)*35)*s        
        img[i,j,2]=(round((i+DIM)*s+y)%2+round((DIM*2-i)*s+y)%2)*127
        img[i,j,1]=(round(5*((i+DIM)*s+y))%2+round(5*((DIM*2-i)*s+y))%2)*127
        img[i,j,0]=(round(29*((i+DIM)*s+y))%2+round(29*((DIM*2-i)*s+y))%2)*127
 
look_img(img)

在这里插入图片描述

颜色图6

大佬cjfaure——尖锐漩涡

h =1024
w =1024
img =255* np.ones((h ,w ,3), dtype=np.uint8)#生成一张1024*1024像素的白图for i inrange(h):# 循环遍历所有像素点,替换像素点for j inrange(w):        
        img[i,j,2]=int(int(np.sqrt((73-i)**2+(609-j)**2)+1)/(np.sqrt(abs(np.sin(int(np.sqrt((860-i)**2+(162-j)**2))/115)))+1)/200)*90
        img[i,j,1]=int(int(np.sqrt((160-i)**2+(60-j)**2)+1)/(np.sqrt(abs(np.sin(int(np.sqrt((86-i)**2+(860-j)**2))/115)))+1)/200)*90
        img[i,j,0]=int(int(np.sqrt((844-i)**2+(200-j)**2)+1)/(np.sqrt(abs(np.sin(int(np.sqrt((250-i)**2+(20-j)**2))/115)))+1)/200)*90
 
look_img(img)

在这里插入图片描述

颜色图7

对参数进行微调:

h =1024
w =1024
img =255* np.ones((h ,w ,3), dtype=np.uint8)#生成一张1024*1024像素的白图for i inrange(h):# 循环遍历所有像素点,替换像素点for j inrange(w):        
        img[i,j,2]=int(int(np.sqrt((148-i)**2+(1000-j)**2)+1)/(np.sqrt(abs(np.sin(int(np.sqrt((500-i)**2+(400-j)**2))/115)))+1)/200)*90
        img[i,j,1]=int(int(np.sqrt((610-i)**2+(60-j)**2)+1)/(np.sqrt(abs(np.sin(int(np.sqrt((864-i)**2+(860-j)**2))/115)))+1)/200)*90
        img[i,j,0]=int(int(np.sqrt((180-i)**2+(100-j)**2)+1)/(np.sqrt(abs(np.sin(int(np.sqrt((5-3-i)**2+(103-j)**2))/115)))+1)/200)*90
 
look_img(img)

在这里插入图片描述

颜色图8

cjfaure大佬——音乐谱

h =1024
w =1024
img =255* np.ones((h ,w ,3), dtype=np.uint8)#生成一张1024*1024像素的白图for i inrange(h):# 循环遍历所有像素点,替换像素点for j inrange(w):        
        img[i,j,2]=(((int(100*np.sin(int((i+400)*(j+100)/11115)))&i)*1029)%256)*5
        img[i,j,1]=(((int(100*np.sin(int((i+400)*(j+100)/11115)))&i)*1029)%256)*5
        img[i,j,0]=(((int(100*np.sin(int((i+400)*(j+100)/11115)))&i)*1029)%256)*5
 
look_img(img)

在这里插入图片描述

颜色图9

色带代码及图片:

h = 1024
w = 1024
img = 255 * np.ones((h ,w , 3), dtype=np.uint8)  #生成一张1024*1024像素的白图
 
for i in range(h):  # 循环遍历所有像素点,替换像素点
    for j in range(w):        
        img[i,j,2] = np.cos(np.arctan2(j-512,i-512)/2)**2*255
        img[i,j,1] = (np.cos(np.arctan2(j-512,i-512)/2-2*np.arccos(-1)/3))**2*255
        img[i,j,0] = (np.cos(np.arctan2(j-512,i-512)/2+2*np.arccos(-1)/3))**2*255
 
look_img(img)

在这里插入图片描述

颜色图10

Snake大佬——三色谢宾斯基三角形

h =1024
w =1024
img =255* np.ones((h ,w ,3), dtype=np.uint8)#生成一张1024*1024像素的白图for i inrange(h):# 循环遍历所有像素点,替换像素点for j inrange(w):        
        img[i,j,2]=int(np.cos(i&j))*255
        img[i,j,1]=int(np.cos((1024-i)&(1024-j)))*255
        img[i,j,0]=int(np.tan((i|j)))*125
 
look_img(img)

在这里插入图片描述

(The End)


本文转载自: https://blog.csdn.net/baidu/article/details/126533883
版权归原作者 果州做题家 所有, 如有侵权,请联系我们删除。

“Python复现颜色图绘制大赛的作品”的评论:

还没有评论