图像处理领域中有很多开源成熟的工具模块和方法可以直接进行使用,目前我主要使用到的库主要包括:PIL、Numpy和OpenCV,其中,PIL是Python自带的模块,在python3中变成了Pillow,名字不同但是方法都是一样的,Numpy是一个科学数值计算模块,因为图像数据本质上是矩阵数据,所以这里也就用到了Numpy模块了,最后一个OpenCV在图像数据处理领域里面是大名鼎鼎的存在,提供了十分丰富的功能。

由于图像数据可以同时被上面三种类型的模块进行处理,这里就有一个需求就是不同方法处理得到的图像数据结果应该怎么样能够公用呢?简单来说:就是如何方便地实现不同类型数据的转化。

这里我对之前完成的项目中使用到的一些转化、处理技巧进行了简单的总结,放在这里,希望能帮助到需要的人,同时也是自己备忘使用,具体的使用内容如下:

#!usr/bin/env python
#encoding:utf-8
from __future__ import divisionimport cv
import cv2
import numpy
from PIL import Image'''
__Author__:沂水寒城
功能: python中PIL.Image,OpenCV,Numpy图像格式相互转换
'''#OpenCV图像数据读写
image=cv.LoadImage('demo.png')
cv.SaveImage('cv_out.png',image)
#PIL图像数据读写
image=Image.open('demo.png')
image.save('pil_out.png')#OpenCV图像数据与PIL图像数据转换
#RGB图像数据
cvimg=cv.LoadImage('color.png',cv.CV_LOAD_IMAGE_COLOR)  #OpenCV图像数据
pimg=Image.frombytes('RGB',cv.GetSize(cvimg),cvimg.tostring())  #PIL图像数据
cvimg2=cv.CreateImageHeader(pimg.size,cv.IPL_DEPTH_8U,3)  #OpenCV图像数据
cv.SetData(cvimg2,pimg.tobytes())
#灰度图像数据
cvimg=cv.LoadImage('demo.png',cv.CV_LOAD_IMAGE_GRAYSCALE)  #OpenCV图像数据
pimg=Image.frombytes('L',cv.GetSize(cvimg),cvimg.tostring()) #PIL图像数据
cvimg2=cv.CreateImageHeader(pimg.size,cv.IPL_DEPTH_8U,1)  #OpenCV图像数据
cv.SetData(cvimg2, pimg.tobytes())#Numpy数据与PIL图像数据转换
image=Image.open('demo.png')  #PIL图像数据
array=numpy.array(image)  #Numpy数据
image2=Image.fromarray(array)  #PIL图像数据 #Numpy数据与OpenCV图像数据转换
cvimg=cv.LoadImage('color.png', cv.CV_LOAD_IMAGE_COLOR)  #OpenCV图像数据
pimg=Image.frombytes("RGB", cv.GetSize(cvimg), cvimg.tostring())  #PIL图像数据
array=numpy.array(pimg)  #Numpy数据
pimg2=cv.fromarray(array)  #OpenCV图像数据#PIL  OpenCV图像数据转换简单形式
#PIL--->OpenCV
image=Image.open('color.png')
img=cv2.cvtColor(numpy.asarray(image),cv2.COLOR_RGB2BGR)
# cv2.imshow('OpenCV',img)
# cv2.waitKey() #OpenCV--->PIL
img=cv2.imread('color.png')
cv2.imshow('OpenCV',img)
image=Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))
# image.show()
# cv2.waitKey() 

其中,demo.png内容如下:

cv_out.png内容如下:

pil_out.png内容如下:

color.png内容如下:

上面的方法都是经过实际测试没有问题的,可以直接使用的,感兴趣的可以拿去试试。

python中PIL.Image,OpenCV,Numpy图像格式相互转换相关推荐

  1. Python中出现:AttributeError: module 'numpy' has no attribute 'dtype'问题解决

    QUESTION:Python中出现:AttributeError: module 'numpy' has no attribute 'dtype'问题解决 ANWSER: 这个问题可是困扰了我一天的 ...

  2. 使用python中PIL库进行切图时候出现了图片全黑

    使用PIL的Image切图时候图片全黑 不知道大家有没有遇见这样得问题,使用python中PIL库进行切图时候出现了图片全黑得现象 今天写了个切图得代码,但是得到得图片是全黑的,像这样的情况: 不知道 ...

  3. python中PIL.Image和OpenCV图像格式相互转换

    PIL.Image转换成OpenCV格式: [python] view plaincopy print? import cv2 from PIL import Image import numpy i ...

  4. python中grid函数_Python / NumPy中meshgrid的目的是什么?

    实际上文档中已经提到了np.mgrid的目的: np.mgrid 从坐标向量返回坐标矩阵. 在给定一维坐标数组x1,x2,...,xn的情况下,为N-D网格上的N-D标量/矢量场的矢量化评估制作N-D ...

  5. python中PIL的安装参考教程

    相信不少同学想使用python处理一些RGB的图片,但是对于python又不熟悉,处于白菜阶段,没错就是和我一样,今天刚好有这样一个任务需要读取RGB图像的像素值,其实就是灰度值.之前采用matlab ...

  6. python中PIL模块

    Image模块 Image模块是在Python PIL图像处理中常见的模块,对图像进行基础操作的功能基本都包含于此模块内.如open.save.conver.show-等功能. open类 Image ...

  7. python中List类型与numpy.array类型的互相转换

    当然要先引入numpy包 import numpy as np List转numpy.array: temp = np.array(list) numpy.array转List: arr = temp ...

  8. python中squeeze函数_Python numpy.squeeze()用法及代码示例

    当我们要从数组形状中删除一维条目时,将使用numpy.squeeze()函数. 用法: numpy.squeeze(arr, axis=None ) 参数: arr :[数组]输入数组. axis : ...

  9. python中pil教程

    Image类是Pillow库中最重要的类 安装Pillow包 pip install pillow 首先导入Image模块 from PIL import Image 打开图像 通过Image 类中的 ...

  10. python中isin函数_Python numpy.isin函数方法的使用

    numpy.isin numpy.isin(element, test_elements, assume_unique=False, invert=False)     [source] 计算test ...

最新文章

  1. Single Image Dehazing via Conditional Generative Adversarial Network(CVPR2018-图像去雾)
  2. python棋盘放米循环结构_Python递归法计算棋盘上所有路径总奖品最大值(京东2016编程题)...
  3. 中国肠道大会 | 日程及嘉宾
  4. Linux下Sed命令的用法(之替换)
  5. CVPR2019目标检测方法进展综述
  6. windows2003+PHP-5.3.8+IIS6.0的安装配置
  7. 对VMware自动安装linux系统说“不”!
  8. 热乎的宇宙条总部面经,已拿offer,速来围观
  9. Dom4j工具--XML的DOM解析(下)--写操作
  10. 工信部:2015年宽带城市20兆农村4兆
  11. Fedora Core下声卡驱动全功略(转)
  12. 大学计算机应用技术专业周记,计算机应用技术实习周记.doc
  13. QT 5.12.9 +VS 2019配置并实现与三菱Q系列PLC通讯功能(1)软件的安装
  14. vue页面引用echart的词云图
  15. java中多线程介绍
  16. 安装配置磁盘阵列SAN存储系统
  17. html引入jquery库
  18. 专业扒站利器使用介绍
  19. JavaScript高级第02天笔记
  20. 本地ecshop网站怎么上传到服务器,ecshop 上传服务器

热门文章

  1. C++基础——类继承中方法重载
  2. 关于如果减少勒索病毒的侵扰:
  3. You Probably Dont Need Derived State
  4. java编程——图片旋转
  5. Java 8 vs. Scala(二):Stream vs. Collection
  6. VS 中PageLayout 属性设置
  7. CentOS 5.5 安装VirtualBox
  8. 自定义nagios监控mogilefs存储节点脚本
  9. Android开发:setAlpha()方法
  10. java面向对象(抽象类)