我想通过将特定位置从0更改为1来在零矩阵中创建一个圆。不幸的是,我的if语句出了点问题,我无法弄清楚。感谢您的帮助!
img = np.zeros((20,20))
def convert2file(image, newfile):
img = Image.new('RGB', (len(image), len(image[0])), "black")
pixels = img.load()
for i in range(len(image)):
for j in range (len(image[i])):
if image[i][j] == 0:
pixels[j,i] = black
else:
pixels[j,i] = white
save2file(img, newfile)
def gen_circle(image):
ret = np.copy(image)
for i in range(len(image)):
for j in range(len(image[i])):
if fabs((j - len(image)/2)**2 + (i - len(image)/2)**2 - len(image)/2**2) == 0.5**2:
ret[i][j] = 1
return ret
draw_pic(gen_circle(img))
答案 0 :(得分:0)
该代码如何:
def gen_circle(image):
ret = np.copy(image)
radius = len(image)/2
radius_sq = radius**2
for i in range(len(image)):
for j in range(len(image[i])):
if (i-radius)**2 + (j-radius)**2 <= radius_sq:
ret[i][j] = 1
return ret
答案 1 :(得分:0)
由于以下几个原因,您需要修正计算结果:
很难进行任意计算以匹配浮点值
几乎所有的计算结果都大于0
(有些甚至超过100
),因此大部分将等于false
i
和j
的值不平衡(因为您从0
开始并在19
结束)
您需要选择一个任意值作为条件(通过查看每个计算结果或通过反复试验),并使条件小于该值(以填充圆圈)。
import numpy as np
from math import fabs
img = np.zeros((20,20))
def gen_circle(image):
ret = np.copy(image)
for i in range(len(image)):
for j in range(len(image[i])):
if fabs((j + 0.5 - len(image)/2)**2 + (i + 0.5 - len(image)/2)**2 - len(image)/2**2) <= 86:
ret[i][j] = 1
return ret
print(gen_circle(img))