将图像(png)转换为矩阵,并进行归一化,反之亦然
我开始尝试图像处理,想要制作一个图像矩阵和一个向量(也就是一维数组),然后再把它们转换回图像。这是我写的代码(参考了openCV的例子)。另外,我想知道如何对这个一维数组进行归一化?归一化之后会发生什么?我能在归一化后把它变成图像吗?
import cv2.cv as cv
import numpy
img=cv.LoadImage("test3.JPG")
mat=cv.GetMat(img)
a = numpy.asarray(mat)
print a
输出结果是:
[[[150 150 150]
[171 171 171]
[242 242 242]
...,
[252 252 252]
[252 252 252]
[252 252 252]]
[[151 151 151]
[170 170 170]
[244 244 244]
...,
[252 252 252]
[252 252 252]
[252 252 252]]
[[159 159 159]
[172 172 172]
[248 248 248]
...,
[252 252 252]
[252 252 252]
[252 252 252]]
...,
[[251 251 251]
[251 251 251]
[251 251 251]
...,
[249 249 249]
[248 248 248]
[248 248 248]]
那三个点是什么意思?它没有打印出所有的值吗?这个特定的图像大小是125X150。
谢谢。
编辑
import cv2.cv as cv
import numpy
import Image
def normalize(arr):
for i in range(3):
minval = arr[...,i].min()
maxval = arr[...,i].max()
if minval != maxval:
arr[...,i] -= minval
arr[...,i] *= (255.0/(maxval-minval))
return arr
img=cv.LoadImage("test3.JPG")
mat=cv.GetMat(img)
a = numpy.asarray(mat)
b = normalize(a)
print b
with open('1.txt.',"w") as f:
f.write("\n".join(" ".join(map(str, x)) for x in (b)))
im = Image.fromarray(b)
im.save("12.jpeg")
1 个回答
1
def normalize(arr):
"""
Linear normalization
http://en.wikipedia.org/wiki/Normalization_%28image_processing%29
"""
# Do not touch the alpha channel
for i in range(3):
minval = arr[...,i].min()
maxval = arr[...,i].max()
if minval != maxval:
arr[...,i] -= minval
arr[...,i] *= (255.0/(maxval-minval))
return arr
import numpy as np
import Image
def normalize(arr):
for i in range(3):
minval = arr[..., i].min()
maxval = arr[..., i].max()
if minval != maxval:
arr[..., i] -= minval
arr[..., i] *= (255.0 / (maxval - minval))
return arr
img = Image.open('orig.jpg').convert('RGBA')
a = np.array(img)
b = normalize(a)
im = Image.fromarray(b)
im.save('output.jpg')
orig.jpg
:
运行这个脚本后会得到 output.jpg
: