PIL对象和numpy三维数组的互相转换
#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三维数组的互相转换的更多相关文章
- Numpy三维数组的转置与交换轴
二维数组的转置应该都知道,就是行列交换 而在numpy中也可以对三维数组进行转置,np.T 默认进行的操作是将0轴与2轴交换 本文主要对三位数组轴交换的理解上发表本人的看法. a = np.array ...
- numpy中三维数组转变成二维数组
numpy中reshape()函数对三维数组进行转换成二维数组,见下面例子: >>>a=np.reshape(np.arange(18),(3,3,2)) >>> ...
- 一、Numpy基础--数组
(一)Numpy数组对象 Numpy中的nadrray是一个多维数组对象,该对象由两部分组成: 实际的数据 描述这些数据的元数据 大部分的数组操作仅仅修改元数据部分,而不改变底层的实际数据. 数组的数 ...
- PIL数据和numpy数据的相互转换
在做图像处理的时候,自己常用的是将PIL的图片对象转换成为numpy的数组,同时也将numpy中的数组转换成为对应的图片对象. 这里考虑使用PIL来进行图像的一般处理. from PIL import ...
- Numpy | 12 数组操作
Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: 修改数组形状 翻转数组 修改数组维度 连接数组 分割数组 数组元素的添加与删除 一.修改数组形状 函数 描述 reshape 不改变数据 ...
- php三维数组去重(示例代码)
php三维数组去重的示例代码. 假设叫数组 $my_array; <?php // 新建一个空的数组. $tmp_array = array(); $new_array = array(); ...
- numpy的数组常用运算练习
import numpy as np # 一维数组 print('==========# 一维数组===========') A = np.array([1, 2, 3, 4]) print(A) # ...
- NumPy 迭代数组
NumPy 迭代数组 NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式. 迭代器最基本的任务的可以完成对数组元素的访问. 接下来我们使用 arange() ...
- jni java与c++交互返回三维数组jobjectArray
1.在java里创建一个类,在类里添加静态方法调用c++的类库dll,在java里创建要返回数组的函数.在java的main方法里创建返回后的测试方法. package cn.gov.cma.cnn. ...
随机推荐
- 【OJ2216】小奇的数列
题目大意 : 给定一个长度为 \(n\) 的数列,以及 \(m\) 次询问,每次给出三个数 \(l\),\(r\) 和 \(P\),询问 \((\sum_{i=l_1}^{r_1}a_i)\;mod\ ...
- Flink 操作链与任务槽
Operator Chains(操作链) Flink出于分布式执行的目的,将operator的subtask链接在一起形成task(类似spark中的管道). 每个task在一个线程中执行. 将ope ...
- 一、VIP课程:互联网工程专题 05-快速掌握Jenkins原理与核心功能
第五课:快速掌握jenkins核心功能.docx 2.164 (2019-02) and newer: Java 8 or Java 11 一.jenkins 概述与环境配置 知识点: 关于可持续化集 ...
- 51node 4个数和0
https://www.51nod.com/Challenge/Problem.html#problemId=1267 第一种方法:两个for+二分:很好理解,不用考虑重复的问题.但是这个还不够快 # ...
- Java学生成绩系统
package text; public class helloworld{ private String stunumber; private String name; private double ...
- javascript如何获取复选框中的值?
思路:获取checkbox对象→循环checkbox数组,根据checked属性判断是否选中→使用value属性获取选中项的值.实例演示如下: 1.HTML结构 <form> <in ...
- python--多线程的应用
python 多线程执行函数,以及调用函数时传参 import threading def func1(): print('this is function1') def func2(x,y): pr ...
- Element.scrollIntoView() 和 document.elementFromPoint ()
Element.scrollIntoView() 让当前的元素滚动到浏览器窗口的可视区域内 element.scrollIntoView(); // 等同于element.scrollIntoV ...
- UVA 10054 The Necklace 转化成欧拉回路
题意比较简单,给你n个项链碎片,每个碎片的两半各有一种颜色,最后要把这n个碎片串成一个项链,要求就是相邻碎片必须是同种颜色挨着. 看了下碎片总共有1000个,颜色有50种,瞬间觉得普通方法是无法在可控 ...
- LIS是什么?【质量控制】
继续[LIS是什么?]中提到的[质量控制]. Ⅱ.质量控制要求非常专业,现在只说一说个人理解,以下仅为LIS检验中部分理解,实际上实验室质量控制还包含的报告时效,实验室温度.湿度等等一系列内容,是一个 ...