python:图像与矩阵之间的转换

矩阵转换为灰度图像
如下代码所示首先加载一幅图像,转换为矩阵后在转回为图像:

import numpy as np
import Image
mg = Image.open(filename)
mats = np.array(mg)
mg2 = Image.fromarray(mats)

但是以上这样的用法有一些需要注意的地方,将矩阵转换为图像的函数不会自动的对其像素值的大小进行变换,也就是说如果矩阵的值在0到1之间的话,那么最后这幅图像的像素值将会只有0和1,会导致这幅图像的所有像素变得非常的暗。所有可以进行矩阵的尺度变换使得矩阵的最小值对应黑色像素,最大值对应白色像素,代码如下所示将矩阵转换为灰度图像的a2i函数:

import Image
def a2i(indata):
    mg = Image.new('L',indata.transpose().shape)
    mn = indata.min()
    a = indata-mn
    mx = a.max()
    a = a*256./mx
    mg.putdata(a.ravel())
    return mg

灰度图像转换为矩阵

from numpy import array,fromstring,unit8
def i2a(mg):
    H,V = mg.size
    d = fromstring(mg.tostring(),unit8)
    d = d.reshape((V,H))
    return d

RGB图像转换为3个矩阵

#简单的将图像分离为三个通道,并分别调用i2a函数
def RGB2cube(rgbmg):
    r,g,b = rgbmg.split()
    r = i2a(r)
    g = i2a(g)
    b = i2a(b)
    return array([r,g,b])

将3个矩阵转换为RGB图像

def Cube2Image(r,g,b):
    ri = a2i(r)
    gi = a2i(g)
    bi = a2i(b)
    mg = Image.merg('RGB',(ri,gi,bi))
    return mg

这里再提供两个颜色转换函数,即RGB图像与YUV图像格式之间的转换

def RGB2YUV(rr,gg,bb):
    y = 0.299*rr + 0.587*gg + 0.114*bb
    u = -0.147*rr -0.289*gg + 0.436*bb
    v = 0.615*rr - 0.515*gg - 0.100*bb
    return y,u,v

def YUV2RGB(y,u,v):
    r = y - 3.94e-5*u + 1.14*v
    g = y - 0.394*u - 0.581*v
    b = y + 2.032*u - 4.81e-4*v
    return r,g,b
  • 10
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值