【问题标题】:Convert Image (png) to Matrix,normalizing it, vise versa将图像(png)转换为矩阵,对其进行归一化,反之亦然
【发布时间】:2013-03-06 02:34:55
【问题描述】:


我开始搞乱图像处理,我想制作一个图像矩阵、向量(一维数组)并将每个图像再次反转为图像,这是代码(取自 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")

【问题讨论】:

  • 三个点通知您它没有打印所有值(因为结果太长)。如果您想查看所有值,您可以 a) 输出到文件或 b) “刷新”输出(查看此链接:stackoverflow.com/questions/230751/…

标签: python opencv image-processing


【解决方案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

【讨论】:

  • 只是想看看事情是如何运作的。 im not really read this. after im normlize 并将其恢复为图像,我会得到一个较低的图像?
  • 我不明白你的问题。什么是“下图”?无论如何,为什么不试试看呢?
  • 我的错误...在我对图像进行规范化后,我尝试将其恢复为图像,但出现错误 TypeError: Cannot handle this data type。还有另一种方法可以恢复标准化图像吗?我想看看它对图像的影响,标准化。
  • 好的,我错误地更改了数组的 dtype。我想我修正了这个错误。立即尝试。
  • 你在用a = normalize(a)吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
相关资源
最近更新 更多