#https://stackoverflow.com/questions/384759/how-to-convert-a-pil-image-into-a-numpy-array

from PIL import Image
import numpy as np
img1=Image.open("f:\cat.jpg")
pix_data2=np.array(img1.getdata()).reshape(img1.size[0],img1.size[1],3)
im=Image.fromarray(np.uint8(pix_data2)) im.show()

这个程序的有意思之处在于把rgb图的通道,分开存入一个三维数组的三个维度中,可以加深对图片通道的理解,比如把程序修改成

from PIL import Image
import numpy as np
img1=Image.open("f:\cat.jpg") pix_data2=np.array(img1.getdata()).reshape(img1.size[0],img1.size[1],3) pix_data4=pix_data2[0:,0:,0:1]
pix_data5=pix_data2[0:,0:,1:2]
pix_data6=pix_data2[0:,0:,2:3]
pix_data7=pix_data2[0:,0:,0:2]
pix_data8=pix_data2[0:,0:,1:3]
pix_data9=pix_data2[0:,0:,::2] print(list(pix_data2))
print(list(pix_data4))
print(list(pix_data5))
print(list(pix_data6))
print(list(pix_data6))
print(list(pix_data7))
Image.fromarray(np.uint8(pix_data7)).show()
Image.fromarray(np.uint8(pix_data8)).show()
Image.fromarray(np.uint8(pix_data9)).show()

>>

rgb三色去掉一种颜色就变成灰色,另外把颜色rgb颜色反转(r<-b,g<-g,b<-r)也产生让人意想不到的效果

PIL对象和numpy三维数组的互相转换的更多相关文章

  1. Numpy三维数组的转置与交换轴

    二维数组的转置应该都知道,就是行列交换 而在numpy中也可以对三维数组进行转置,np.T 默认进行的操作是将0轴与2轴交换 本文主要对三位数组轴交换的理解上发表本人的看法. a = np.array ...

  2. numpy中三维数组转变成二维数组

    numpy中reshape()函数对三维数组进行转换成二维数组,见下面例子: >>>a=np.reshape(np.arange(18),(3,3,2)) >>> ...

  3. 一、Numpy基础--数组

    (一)Numpy数组对象 Numpy中的nadrray是一个多维数组对象,该对象由两部分组成: 实际的数据 描述这些数据的元数据 大部分的数组操作仅仅修改元数据部分,而不改变底层的实际数据. 数组的数 ...

  4. PIL数据和numpy数据的相互转换

    在做图像处理的时候,自己常用的是将PIL的图片对象转换成为numpy的数组,同时也将numpy中的数组转换成为对应的图片对象. 这里考虑使用PIL来进行图像的一般处理. from PIL import ...

  5. Numpy | 12 数组操作

    Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: 修改数组形状 翻转数组 修改数组维度 连接数组 分割数组 数组元素的添加与删除 一.修改数组形状 函数 描述 reshape 不改变数据 ...

  6. php三维数组去重(示例代码)

    php三维数组去重的示例代码.  假设叫数组 $my_array; <?php // 新建一个空的数组. $tmp_array = array(); $new_array = array(); ...

  7. numpy的数组常用运算练习

    import numpy as np # 一维数组 print('==========# 一维数组===========') A = np.array([1, 2, 3, 4]) print(A) # ...

  8. NumPy 迭代数组

    NumPy 迭代数组 NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式. 迭代器最基本的任务的可以完成对数组元素的访问. 接下来我们使用 arange() ...

  9. jni java与c++交互返回三维数组jobjectArray

    1.在java里创建一个类,在类里添加静态方法调用c++的类库dll,在java里创建要返回数组的函数.在java的main方法里创建返回后的测试方法. package cn.gov.cma.cnn. ...

随机推荐

  1. 079-PHP数组排序,两次循环法封装成函数

    <?php function mysort($arr){ //将排序的代码封装为函数 echo '<br />数组排序之前的信息:<br />'; print_r($ar ...

  2. jedis的ShardedJedisPool链接池的扩容问题

    回顾上一篇文章jedis连接池的构建. 我们来分析ShardedJedisPool的基于客户端分片所可能带来的问题:扩容 ShardedJedisPool的节点扩容 .ShardedJedisPool ...

  3. 算法实战(六)Z 字形变换

    一.前言 之前因为第五题最长回文字符串需要使用到dp解法,所以我花了很长的时间来研究dp(因为每天又要上班,加上这段时间事情比较多,所以花了三个星期才搞定),好不容易算入了个门,有兴趣的同学可以看看我 ...

  4. vue 父子传值,子页面没有实时刷新的问题

    在做高德地图的时候,发现列表点击编辑的时候,地图不能实时更新: <el-form-item label="门店坐标:" :label-width="formLabe ...

  5. POJ 2521:How much did the businessman lose

    How much did the businessman lose Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9965 ...

  6. 关于Promise的异步依次函数调用

    在Promise中async用于定义一个异步函数(可不写),该函数返回一个Promise. 如果async函数返回的是一个同步的值,这个值将被包装成一个理解resolve的Promise, 等同于re ...

  7. 21 ~ express ~ 内容详情展示 和 阅读数处理

    1,前台 ,/views/main/index.html ,将文章 id 通过url 传送给后台 {% for content in contents %} <div class="p ...

  8. JAVAEE 和项目开发(第二课:HTTP协议的特点和交互流程)

    HTTP 的概念和介绍 概念:超文本传输协议(Hyper Text Transfer Protocol) 作用:规范了浏览器和服务器的数据交互 特点: 简单快速:客户向服务器请求服务时,只需传送请求方 ...

  9. 十七、CI框架之数据库操作insert用法

    一.代码如下: 二.我们访问一下页面 三.查看数据库,已经插入了一条数据 不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意金额给作者(微信号:382477247)哦,谢谢.

  10. HDU - 1068 Girls and Boys(二分匹配---最大独立集)

    题意:给出每个学生的标号及与其有缘分成为情侣的人的标号,求一个最大集合,集合中任意两个人都没有缘分成为情侣. 分析: 1.若两人有缘分,则可以连一条边,本题是求一个最大集合,集合中任意两点都不相连,即 ...