【发布时间】:2018-05-06 07:21:17
【问题描述】:
代码应该获取每个像素 rgb 值并将其存储在二维数组中(例如,pixels[pixelNumber][r, g, b]),然后将其发送到用户定义的方法,在这种情况下,模糊它(使用高斯模糊)。宽度和高度是从图像中获取的像素宽度和高度定义,半径是用户定义的半径,其中像素被平均化为模糊。 它在
处给了我一个除以 0 的错误weight_r = pixels[j][0] * weight
weight_g = pixels[j][1] * weight
weight_b = pixels[j][2] * weight
在我将 total_weight 从 0 更改为 1 之前,在第一个 for 循环下方定义时,如果有帮助的话
def blur(pixels, radius, width, height):
for i in range(len(pixels)):
total_weight = 1
pix_weight = 0
r_temp = radius
pixels_2 = copy.deepcopy(pixels)
x = i % width
y = (i // width) + 1
for j in range(len(pixels)):
x_2 = j % width
y_2 = (j // width) + 1
dist = math.sqrt(((x_2 - x) ** 2) + ((y_2 - y) ** 2))
while(r_temp > 0):
if((x_2 - radius == x or x_2 + radius == x) and (y_2 - radius == y or y_2 + radius == y) and dist != 0):
weight = ((math.e ** (-((dist ** 2) / (2 * (radius ** 2))))) / (2 * math.pi * (radius ** 2)))
total_weight = total_weight + weight
weight_r = pixels[j][0] * weight
weight_g = pixels[j][1] * weight
weight_b = pixels[j][2] * weight
pix_weight = pix_weight + weight_r + weight_g + weight_b
r_temp = r_temp - 1
final_blur = int((pix_weight / total_weight) / 255)
pixels_2[i][0] = int(pixels[i][0] * final_blur)
pixels_2[i][1] = int(pixels[i][1] * final_blur)
pixels_2[i][2] = int(pixels[i][2] * final_blur)
return pixels_2
上面的方法,像素是一个二维数组,半径、宽度、高度都是整数。
【问题讨论】:
-
既然你这不是递归方法,你应该一直卡在
while循环中。 -
@ZeinabAbbasimazar 我正在使用 r_temp = r_temp - 1,但最终不应该将其降低到 0 并关闭 while 循环吗?
-
我无法使用此代码重现无限循环。对于
pixels的各种列表列表以及兼容的半径、宽度和高度参数,它会按预期终止并产生结果。您调用它的确切参数集是什么? -
添加
print(r_temp)并观察它的作用 我认为您有大量像素,所以这需要的时间太长了 -
@ChrisFaffler 无限循环还是计算时间长?
标签: python python-3.x loops infinite-loop