草庐IT

关于相同数据保存生成不同图像:相同数据保存生成不同图像 – Python

codeneng 2023-03-28 原文

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):
   """
    Generate a heat map of the image
    :param name: the name of the file
   """

    #self.normalize_image_data()
    plt.figure()
    fig = plt.imshow(self.data, extent=[-1, 1, -1, 1])
    plt.colorbar(fig)
    plt.savefig(name+".png")
    plt.close()

代表我的数据的类是这样的:

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")

我得到一张相对于另一张旋转的图像。

方法一:

方法二:

我不明白为什么,但我必须解决这个问题。

任何帮助将不胜感激。
提前致谢。

  • 作为旁注,您为什么首先使用 putpixel ?这是构建图像的最慢方法,尤其是在旧的 PIL/Pillow 版本中。为什么不用一个向量化操作来翻译数组,然后一次复制整个东西呢?还是使用 ImageDraw?或者只是别的什么?
  • 我刚刚给了你两个不同的提示,以及一个文档链接,其中包含更广泛的提示。


显然数据是行优先格式,但您正在像列优先格式一样进行迭代,这会将整个数据旋转 -90 度。

快速解决方法是替换这一行:

1
color = self.data[x][y]

一个€|用这个:

1
color = self.data[y][x]

(虽然可能 data 是一个数组,所以你真的应该使用 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 文档中并不完全清楚,但是如果您查看 imshow,它会解释它采用形状为 (n, m) 的类似数组的对象并将其显示为 MxN 图像。

  • 所以我可以像这样初始化我的数据: self.data = [] for i in range(height): self.data.append([0] * width) 来修复它?抱歉,我是 Python 新手。
  • @pceccon:您是要旋转 imshow 版本以匹配您的 putpixel 版本,还是相反?如果 imshow 是正确的,请不要理会您的数据,并更改在 save_image 中循环它的方式(如我的回答)。如果 ifshow 错误,请更改构建数据的方式。

有关关于相同数据保存生成不同图像:相同数据保存生成不同图像 – Python的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  5. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  6. ruby - 如果指定键的值在数组中相同,如何合并哈希 - 2

    我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat

  7. ruby-on-rails - Ruby 检查日期时间是否为 iso8601 并保存 - 2

    我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby​​是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查

  8. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  9. ruby-on-rails - Ruby on Rails - 为文本区域和图片生成列 - 2

    我是Rails的新手,所以请原谅简单的问题。我正在为一家公司创建一个网站。那家公司想在网站上展示它的客户。我想让客户自己管理这个。我正在为“客户”生成一个表格,我想要的三列是:公司名称、公司描述和Logo。对于名称,我使用的是name:string但不确定如何在脚本/生成脚手架终端命令中最好地创建描述列(因为我打算将其设置为文本区域)和图片。我怀疑描述(我想成为一个文本区域)应该仍然是描述:字符串,然后以实际形式进行调整。不确定如何处理图片字段。那么……说来话长:我在脚手架命令中输入什么来生成描述和图片列? 最佳答案 对于“文本”数

  10. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

随机推荐