【问题标题】:How can I decode a .txt file into a image format如何将 .txt 文件解码为图像格式
【发布时间】:2021-08-02 00:52:25
【问题描述】:

我有一个包含像素坐标和像素值的 .txt 文件。我试图以 8 位压缩的 png 和 jpeg 格式将其可视化,但我希望它是 16 位图像格式,如 tiff。我尝试以 tiff 格式保存我的图像,但它不是我预期的图像,它有很多噪音,与 png 或 jpeg 相比,当我打开文件时我什至看不到图像。

这是我的代码

import numpy as np
from PIL import Image 
import pandas as pd
from matplotlib import pyplot as plt 



file = open('filename')
data = pd.read_table(file, header=None, skiprows=8, decimal=",")
data = data.iloc[:, :]
rows, cols = data.shape

na = np.array(data)
plt.imshow(na)

plt.imsave('mes.png',an)
na.save('myimg.tif')

我在执行此操作时做错了什么,有什么建议或更改吗? 感谢您的帮助,感谢您的宝贵时间。

【问题讨论】:

  • 欢迎来到 SO!作为一般准则,请尽量避免将链接粘贴到 GDrive,因为这些链接有时会中断。我建议使用 SO 的内置图片上传器来获取图片。对于文本,您应该尝试使用正确的代码格式粘贴它或使用 pastebin
  • 我尝试使用内置的图片上传器上传它们,但我的图片和数据太大而无法原生上传。这就是我使用 Gdrive 上传的原因。

标签: python pandas numpy matplotlib image-processing


【解决方案1】:

问题是对于无符号 16 位 TIFF 或 PNG 文件,您没有将数据标准化为正确的 0..65535 范围。

我在这里使用的是 OpenCV 函数,但你可以使用 Numpy 或直接 Python 来获得相同的结果。所以,转换为 Numpy 数组后

... your code ...
na = np.array(data)

import cv2
# Normalise (scale) to range 0..65535
sc = cv2.normalize(na, None, alpha=0, beta=65535, norm_type = cv2.NORM_MINMAX, dtype = cv2.CV_16U)

# Save, using any ONE of the following methods
Image.fromarray(sc).save('result.tif')
Image.fromarray(sc).save('result.png')
cv2.imwrite('result.tif', sc)
cv2.imwrite('result.png', sc)

【讨论】:

  • 非常感谢您的帮助。我没有考虑标准化。
  • 酷 - 很高兴它现在可以工作了。请记住,问题(和答案)是免费的,所以如果您再次遇到困难,请回来再问另一个问题。祝你的项目好运!
  • 您好,我有一个小问题,归一化是否会保留与输入文件相同的像素值,还是会根据最小值和最大值进行相应更改。
  • 它将使图像中最亮的像素为 65535,最暗的像素为 0。根据您的需要,还有其他标准化方法。
猜你喜欢
  • 2021-07-03
  • 1970-01-01
  • 2014-01-20
  • 1970-01-01
  • 2018-04-24
  • 2014-01-13
  • 2020-01-28
  • 1970-01-01
  • 2012-04-16
相关资源
最近更新 更多