Same data saved generate different images – Python
我的代码中有两种保存图像数据的方法,一种只是将其值保存为灰度值,另一种用于生成热图图像:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
def save_image(self, name): """ Save an image data in PNG format :param name: the name of the file """ graphic = Image.new("RGB", (self.width, self.height)) putpixel = graphic.putpixel for x in range(self.width): for y in range(self.height): color = self.data[x][y] color = int(Utils.translate_range(color, self.range_min, self.range_max, 0, 255)) putpixel((x, y), (color, color, color)) graphic.save(name +".png","PNG") def generate_heat_map_image(self, name): |
代表我的数据的类是这样的:
1
2 3 4 5 6 7 |
class ImageData:
def __init__(self, width, height): self.width = width self.height = height self.data = [] for i in range(width): self.data.append([0] * height) |
为两种方法传递相同的数据
ContourMap.save_image(“ImagesOutput/VariabilityOfGradients/ContourMap”)
ContourMap.generate_heat_map_image(“ImagesOutput/VariabilityOfGradients/ContourMapHeatMap”)
我得到一张相对于另一张旋转的图像。
方法一:
方法二:
我不明白为什么,但我必须解决这个问题。
任何帮助将不胜感激。
提前致谢。
显然数据是行优先格式,但您正在像列优先格式一样进行迭代,这会将整个数据旋转 -90 度。
快速解决方法是替换这一行:
1
|
color = self.data[x][y]
|
一个€|用这个:
1
|
color = self.data[y][x]
|
(虽然可能
更清晰的解决方法是:
1
2 3 4 5 |
for row in range(self.height):
for col in range(self.width): color = self.data[row][col] color = int(Utils.translate_range(color, self.range_min, self.range_max, 0, 255)) putpixel((col, row), (color, color, color)) |
这可能从 pyplot 文档中并不完全清楚,但是如果您查看
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/267963.html