python进行图像处理中分别用到过matplotlib.pyplot、PIL、cv2三种库,这三种库图像读取和保存方法各异,并且图像读取时顺序也有差异,如plt.imread和PIL.Image.open读入的都是RGB顺序,而cv2.imread读入的是BGR顺序。使用时需要倍加注意。

现参考http://www.jianshu.com/p/3977d674da85。对这三种库图像读取保存进行梳理。与原参考资源有一定差异。当前使用为python3.5版本。

读取图像

1.matplotlib.pyplot

matplotlib读取进来的图片是unit8,0-255范围。

2.PIL.image.open

PIL是有自己的数据结构的,但是可以转换成numpy数组,转换后的数组为unit8,0-255

3.cv2.imread

opencv读进来的是numpy数组,类型是uint8,0-255。

4.plt.imread和PIL.Image.open读入的都是RGB顺序,而cv2.imread读入的是BGR顺序。使用时需要倍加注意。

显示图像

均用plt.imshow(img):因为opencv读取进来的是bgr顺序呢的,而imshow需要的是rgb顺序,因此需要先反过来plt.imshow(img[..., -1::-1])。

保存图像

1 PIL.image - 保存PIL格式的图片

img.save("1.jpg")

2.cv2.imwrite - 保存numpy格式的图片

cv2.imwrite("1.jpg")

OpenCV读取的图片从BGR转换为RGB

import cv2

img=cv2.imread(‘imagename’)

方法一

b,g,r=cv2.split(img)

img2=cv2.merge([r.g.b])

方法二

img2=img[: , : , : : -1]

- 显示
b,g,r = cv2.split(img)
img_rgb = cv2.merge([r,g,b])
plt.figure()
plt.imshow(img_rgb)
plt.show()

- caffe / tensorflow 通道顺序问题

img = np.transpose(img, (0, 2, 3, 1))

img = img.reshape(img.shape[0], img.shape[2], img.shape[3], img.shape[1])

img_new = zeros((img.shape[0], img.shape[2], img.shape[3], img.shape[1]), dtype = np.float32)
for c in range(0, img.shape[1]):
for i in range(0, img.shape[2]):
for j in range(0, img.shape[3]):
img_new[:,c,i,j] = img_new[:,i,j,c]

matplotlib、PIL、cv2图像操作 && caffe / tensorflow 通道顺序的更多相关文章

  1. CV2图像操作

    一.读入图像使用函数cv2.imread(filepath,flags)读入一副图片filepath:要读入图片的完整路径flags:读入图片的标志 cv2.IMREAD_COLOR:默认参数,读入一 ...

  2. Tensorflow图像操作

    图像操作 图像基本概念 在图像数字化表示当中,分为黑白和彩色两种.在数字化表示图片的时候,有三个因素.分别是图片的长.图片的宽.图片的颜色通道数.那么黑白图片的颜色通道数为1,它只需要一个数字就可以表 ...

  3. Python用Pillow(PIL)进行简单的图像操作

    Python用Pillow(PIL)进行简单的图像操作 颜色与RGBA值 计算机通常将图像表示为RGB值,或者再加上alpha值(通透度,透明度),称为RGBA值.在Pillow中,RGBA的值表示为 ...

  4. 学习笔记TF015:加载图像、图像格式、图像操作、颜色

    TensorFlow支持JPG.PNG图像格式,RGB.RGBA颜色空间.图像用与图像尺寸相同(height*width*chnanel)张量表示.通道表示为包含每个通道颜色数量标量秩1张量.图像所有 ...

  5. TensorFlowIO操作(三)------图像操作

    图像操作 图像基本概念 在图像数字化表示当中,分为黑白和彩色两种.在数字化表示图片的时候,有三个因素.分别是图片的长.图片的宽.图片的颜色通道数.那么黑白图片的颜色通道数为1,它只需要一个数字就可以表 ...

  6. 基本图像操作和处理(python)

    基本图像操作和处理(python) PIL提供了通用的图像处理功能,以及大量的基本图像操作,如图像缩放.裁剪.旋转.颜色转换等. Matplotlib提供了强大的绘图功能,其下的pylab/pyplo ...

  7. 【Python | opencv+PIL】常见操作(创建、添加帧、绘图、读取等)的效率对比及其优化

    一.背景 本人准备用python做图像和视频编辑的操作,却发现opencv和PIL的效率并不是很理想,并且同样的需求有多种不同的写法并有着不同的效率.见全网并无较完整的效率对比文档,遂决定自己丰衣足食 ...

  8. python进阶—OpenCV之常用图像操作函数说明(转)

    文章目录cv2.thresholdcv2.bitwise_andcv2.bitwise_orcv2.bitwise_notcv2.inRangecv2.resizecv2.adaptiveThresh ...

  9. 《学习opencv》笔记——矩阵和图像操作——cvSetIdentity,cvSolve,cvSplit,cvSub,cvSubS and cvSubRS

    矩阵和图像的操作 (1)cvSetIdentity函数 其结构 void cvSetIdentity(//将矩阵行与列相等的元素置为1.其余元素置为0 CvArr* arr//目标矩阵 ); 实例代码 ...

随机推荐

  1. Python 线程和进程

    一.什么是线程 1.线程是操作系统能够进行运算调度的最小单位.它被包含在进程中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务 ...

  2. k8s 英文文档翻译

    https://medium.com/google-cloud/understanding-kubernetes-networking-pods-7117dd28727 

  3. Thinkphp3.1 php 链接SqlServer

    ThinkPHP链接 M("lk_employeeInfo","Null/表前缀","sqlsrv://账号:密码@服务器:端口/数据库") ...

  4. Java中byte、short、char、int、long运算时自动类型转化问题

    -------------------------------------------------------------------------------------------------- ★ ...

  5. Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第十集之Nginx反向代理原理】(有参考其他文章)

    1,正向代理(代理客户机) 2,反向代理(代理服务器,所以叫反向代理) 3,集群+负载均衡 集群指的是将几台服务器集中在一起,实现同一业务. 负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台 ...

  6. LoadRunner之IP欺骗

     一.启动IP欺骗,弹出提示窗口:      二.将本机改为静态IP: 1.查看当前的IP相关信息: 2.更改IP:  三.正式设置模拟IP号段: 1.重复步骤一,会弹出如下弹窗,选择第二项并下一步: ...

  7. HDU 6119 小小粉丝度度熊 (区间去重)【尺取】

    <题目链接> 度度熊决定每天都在星星小姐的贴吧里面签到. 但是度度熊是一个非常健忘的孩子,总有那么几天,度度熊忘记签到,于是就断掉了他的连续签到. 不过度度熊并不是非常悲伤,因为他有m张补 ...

  8. java date HHmmss hhmmss

    系统交互时,用到时间流水号的设计,出现时间流水号相同的情况,故对时间格式化各种情况做了研究 SimpleDateFormat(format) format:年月日  yyyyMMdd时分秒  HHmm ...

  9. vue中的组件

    一.自定义组件1.组件命名   A.dom模板在HTML模板中始终使用kebab-case命名组件 <kebab-cased-component> </kebab-cased-com ...

  10. python函数(一)调用函数

    在python中内置了很多函数或者类,比如:int,str,list,tuple,等.当然也可以自建函数,这个放在后文讨论.原理如下: 其实python中的类和方法非常非常多,这里只是以点带面,提供一 ...