#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. C++ 99表

    #include<iostream> using namespace std; class Sumes { public: int sum; int i, j; }; int main() ...

  2. ZOJ 1409 communication system 双变量型的DP

    这个题目一开始不知道如何下手,感觉很像背包,里面有两个变量,一个带宽B,一个价格P,有n个设备,每个设备有k个可选的器材(只需选一个),每个器材都有自己的B和P, n个设备选n个器材,最终,FB=所有 ...

  3. Kicstart+pxe搭建自动化安装Linux 整理了一下

    一直想把 有道云得笔记整理一下传上来  都是自己亲测过 ,先来这篇吧  : 二小时安装 100台Linux  system  其实Winddows 也可以这样搞  只是方法    组件不同  原理一样 ...

  4. 学习spring的第三天

    1.手动的依赖注入出了昨天所讲的利用<property>和<constructor-arg>标签设置注入外还可以通过属性值设置,这样就少些了一些代码... 1.1:直接在< ...

  5. c++程序—三目运算符

    #include<iostream> using namespace std; #include<string> int main() { //三目运算符 ; ; ; c = ...

  6. ORACLE时间相关问题

    一.遇到一个情况数据库存入的时间格式为20180831154546,需要将其转化为日期时分秒格式的. to_date('20180831154546', 'yyyy-mm-dd hh24:mi:ss' ...

  7. .NET CORE部署各种问题

    1.安装运行时以后,执行dotnet --version查看版本提示  丢失api-ms-win-crt-runtime-l1-1-0.dll, 当本地api-ms-win-crt-runtime-l ...

  8. stringutil stringutils

    org.apache.commons.lang.StringUtils类是用于操作Java.lang.String类的,而且此类是null安全的,即如果输入参数String为null,则不会抛出Nul ...

  9. linux部分环境搭建

    连接数据库: mysql -hrm-uf6b23117l3s5t69zjo.mysql.rds.aliyuncs.com -uwswl -pwswl@2019 显示用户: show databases ...

  10. part6 城市页面搜索内容开发

    keyword 监听时间做一个节流处理 keyword为input输入的内容 //当逻辑卡壳的时候 可以试着重启服务器,浏览器 当搜索内容出现很多的时候 内容无法滚动 可以引入 better-scro ...