我开始搞乱图像处理,我想制作一个图像矩阵,矢量(一维数组)并再次反转每个图像,这是代码(取自openCV的例子),此外 - 我将如何规范化1d阵列?在我对这个数组进行规范化之后发生了什么,我可以在规范化之后将它变成图像?
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")
答案 0 :(得分: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
: