Python: 原始图像数据转灰度图

0 投票
2 回答
2532 浏览
提问于 2025-04-18 16:02

我有一些原始的图像数据,存储在一个文本文件里,格式大概是这样的,我想把它变成一个二维数组,并转换成灰度图。

0
0
0
0
24
243
227
223
224
225
227
228
228

我想做的是把这些数据转换成灰度图,然后显示出来。我打算使用numpy库……我在matlab里已经实现了这个功能,但在python中遇到了一些困难。

我尝试过以下方法:

import numpy as np
from PIL import Image
from pylab import *

ROWS = 144
COLUMNS = 175
raw_image = []

lines = [line.strip().split(',') for line in open('CAMERA.txt')

for i in lines:
    raw_image.append(i)

mat_image = np.zeros((ROWS, COLUMNS), dtype = int)

for i in rage(ROWS):
    for j in range(COLUMNS):
        mat_image.itemset(i, j, raw_image[(i-1)*COLUMNS + j])

plt.gray()
axes = app.image.add_subplot(111)
self.im = Image.fromarray(mat_image)
axes.imshow(self.im)
app.imageCanvas.draw()

我还尝试过这样做:

np.reshape(raw_image, ROWS, COLUMNS)

但是这两种方法都不行。有没有人能给点建议?

提前谢谢大家。

2 个回答

0

这里有一个很简单的方法,可以把文本中的数字转换成PIL图像,这个方法对我来说很好用:

import numpy as np
from PIL import Image

ROWS = 50
COLUMNS = 50

# greyValues.txt is 2500 RGB values 0-255 one per line
arr = np.genfromtxt('greyValues.txt', dtype=np.int8)

arr.shape = (ROWS, COLUMNS)

img = Image.fromarray(arr, 'L')
img.show()
img.save("textimage.jpg")
1

下面这个程序可以实现你想要的功能,如果我理解得没错的话;-)

import numpy as np
import matplotlib.pyplot as plt


if __name__=='__main__':

    rows = 144
    columns = 175

    camera_image = np.loadtxt(r'path/to/filename')
    if(not camera_image.size == rows * columns):
        raise Exception('Size mismatch!')

    my_image = np.reshape(camera_image, (rows, columns)) / 255.0

    figure = plt.figure()
    axes = figure.add_subplot(1, 1, 1)

    axes.imshow(my_image)

    plt.show()

祝好

撰写回答