2013-03-17 104 views
0


我开始搞乱图像处理,我想制作一个图像矩阵,向量(一维数组)并将每个图像反转为图像,这是代码(取自openCV的示例),另外 - 我将如何标准化1d数组?以及我是否正常化这个数组后,会发生什么,我可以使它正常化后的图像?
将图像(PNG)转换为矩阵,对其进行规格化,反之亦然

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

这三个点通知您,它不会打印所有值(因为结果太长)。如果你想看到所有的值你可以a)输出到一个文件或b)“刷新”输出(看看这个链接:http://stackoverflow.com/questions/230751/how-to-flush -output-of-python-print) – david 2013-03-17 19:44:53

回答

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

enter image description here

运行脚本产生output.jpg

enter image description here

+0

只是想看看事情是如何工作的。我真的没有读到这个。在我规范化并将其还原为图像后,我会得到较低的图像? – 2013-03-17 19:59:04

+0

我不明白你的问题。什么是“低级形象”?无论如何,为什么不试试看看? – unutbu 2013-03-17 20:30:08

+0

我的错误...我调整了图像后,我试图恢复它的形象,我得到了错误TypeError:无法处理这种数据类型。还有另一种方法来恢复标准化的图像?我想看看它如何影响图像,正常化。 – 2013-03-17 20:35:20

相关问题