前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图片RGB三维矩阵的表示

图片RGB三维矩阵的表示

作者头像
用户1733462
发布2018-06-07 15:00:53
5.8K0
发布2018-06-07 15:00:53
举报
文章被收录于专栏:数据处理

一个图片有三个通道RGB,每个通道就是一层数据 以一个图片为例子,从图片数据,再由数据到图片转化过程,理解数据与图形以及表示的关系

兔子

代码语言:javascript
复制
from PIL import Image
#打开图片
im = Image.open('tuzi.jpg')
#导入像素
pix = im.load()
#获取宽度
width = im.size[0]
print '图片宽%s'%width
#获取高度
height = im.size[1]
print '图片高%s'%height
# tuzi保存每个像素点值
tuzi = []
for x in range(height):   
    for y in range(width):       
        r, g, b = pix[y, x]
        # 每个点像素包含rgb三个通道
        # 注意这里读取顺序,我是横着读取,加到数组中,
        # 如果竖着读取会把图搞反了,可以自己脑补下。
        tuzi+=[r,g,b]

我们将tuzi,reshape成图片的样子

代码语言:javascript
复制
tuziArr = np.array(tuzi).reshape([height,width,3])
代码语言:javascript
复制
from matplotlib.font_manager import FontProperties  
  
def getChineseFont():  
    return FontProperties(fname='/System/Library/Fonts/PingFang.ttc')  
代码语言:javascript
复制
%matplotlib inline
from PIL import Image
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
matplotlib.rcParams['figure.figsize'] = (20.0, 20.0)
# channel表示图片通道,取某一个通道数据方法[:,:,x]
def imshow(channel, ax, picture_data):
    tt = np.array([0]*rt.shape[0]*rt.shape[1]*3).reshape(
            [rt.shape[0],rt.shape[1], 3])
    if channel == 3:
        # 全部通道
        tt = picture_data
    else:
        tt[:,:,channel]=picture_data[:,:,channel]
    tt_img = np.array(tt, dtype='uint8')
    ax.imshow(tt_img)
    #help(ax)

plt.figure()
N = 4
fig, axes = plt.subplots(1,N)
for i in range(N):
    imshow(i, axes[i], tuziArr)
plt.show()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.05.12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档