我需要在现有图像中绘制彩色检查器网格,并从列表中获取颜色。 这是我的代码:
import image as im
def draw_gen_checkers(img, s, colors):
n = 0
for i in range(len(img)/s):
for j in range(len(img[0])/s):
for ii in range(i*s, i*s+s):
for jj in range(j*s,j*s+s):
img[ii][jj] = colors[n]
if n == len(colors)-1:
n = 0
else:
n = n + 1
im.visd(img)
img = im.create(300, 200, (0,0,0))
colors = [(255,128,0),(0,0,255),(0,255,0),(255,0,0)]
s = 25
使用此代码,这是我得到的结果:Image1
当图片看起来像这样:Image
所有提前!
答案 0 :(得分:0)
很高兴看到你的工作进展:)
让我们进行数学运算:你的照片长300px,你的情况是25px长,所以你每行有12个案例,因为你有4种颜色你有12 // 4 == 3颜色轮换线,但是因为12%3 == 0,当你开始你的新行时,你的n又回到0.而且你说你想要在每一行中增加颜色的偏移量,所以你的所有行都是相同的。
只需在每行的开头添加一个n增量即可。
对于你的n增量,而不是使用if-else的人经常使用模运算符n = (n+1) % len(colors) # 0, 1, 2, 3, 0, 1, ...
编辑:当我说'在每行的开头添加一个n增量'我在考虑这样的事情(我认为它应该是好的):
def draw_gen_checkers(img, s, colors):
n = 0 # Alternatively n = len(colors)
for i in range(len(img)/s):
n = (n + 1) % len(colors)
for j in range(len(img[0])/s):
for ii in range(i*s, i*s+s):
for jj in range(j*s,j*s+s):
img[ii][jj] = colors[n]
n = (n + 1) % len(colors)
缺点是您使用的第一种颜色将是列表中的第二种颜色,因为它会在其他所有颜色之前增加n。取决于你做了什么它可能是一个问题,如果它是你可以初始化n到len(颜色)-1来修复它。
我还会创建一个函数draw_square(i,j,s,c),带有2个最内部循环,这将使代码更具可读性和模块性(这个函数在某些时候可能在其他地方有用)
答案 1 :(得分:0)
Toppings
打印:img