numpy、cv2等操作图片基本操作

相关包

  1. matplotlib
  2. PIL
  3. cv2
  4. numpy

各种操作

读取图片

1 matplotlib.pylab

import pylab as plt
import numpy as np
img = plt.imread('examples.png')
print(type(img), img.dtype, np.min(img), np.max(img))
[out]
(<type 'numpy.ndarray'>, dtype('float32'), 0.0, 1.0)    # matplotlib读取进来的图片是float,0-1

2 PIL.image.open


from PIL import Image
import numpy as np
img = Image.open('examples.png')
print(type(img), np.min(img), np.max(img))
img = np.array(img)     # 将PIL格式图片转为numpy格式
print(type(img), img.dtype, np.min(img), np.max(img))
[out]
(<class 'PIL.PngImagePlugin.PngImageFile'>, 0, 255)    # 注意,PIL是有自己的数据结构的,但是可以转换成numpy数组
(<type 'numpy.ndarray'>, dtype('uint8'), 0, 255)    # 和用matplotlib读取不同,PIL和matlab相同,读进来图片和其存储在硬盘的样子是一样的,uint8,0-255

3 cv2.imread

import cv2
import numpy as np
img = cv2.imread('examples.png')    # 默认是读入为彩色图,即使原图是灰度图也会复制成三个相同的通道变成彩色图
img_gray = cv2.imread('examples.png', 0)    # 第二个参数为0的时候读入为灰度图,即使原图是彩色图也会转成灰度图
print(type(img), img.dtype, np.min(img), np.max(img))
print(img.shape)
print(img_gray.shape)
[out]
(<type 'numpy.ndarray'>, dtype('uint8'), 0, 255)    # opencv读进来的是numpy数组,类型是uint8,0-255
(824, 987, 3)    # 彩色图3通道
(824, 987)    # 灰度图单通道

注意,pylab.imread和PIL.Image.open读入的都是RBG顺序,而cv2.imread读入的是BGR顺序,混合使用的时候要特备注意

import cv2
import pylab as plt
from PIL import Image
import numpy as np
img_plt = plt.imread('examples.png')
img_pil = Image.open('examples.png')
img_cv = cv2.imread('examples.png')
print(img_plt[125, 555, :])
print(np.array(img_pil)[125, 555, :] / 255.0)
print(img_cv[125, 555, :] / 255.0)
[out]
[ 0.61176473  0.3764706   0.29019609]
[ 0.61176471  0.37647059  0.29019608]
[ 0.29019608  0.37647059  0.61176471]    # opencv的是BGR顺序

显示图片

1 matplotlib.pylab - plt.imshow,这个函数的实际上就是将一个numpy数组格式的RGB图像显示出来

import pylab as plt
import numpy as np
img = plt.imread('examples.png')
plt.imshow(img) 
plt.show()
import pylab as plt
from PIL import Image
import numpy as np
img = Image.open('examples.png')
img_gray = img.convert('L')    #转换成灰度图像
img = np.array(img)
img_gray = np.array(img_gray)
plt.imshow(img)    # or plt.imshow(img / 255.0),matplotlib和matlab一样,如果是float类型的图像,范围是0-1才能正常imshow,如果是uint8图像,范围则需要是0-255
plt.show()
plt.imshow(img_gray, cmap=plt.gray())    # 显示灰度图要设置cmap参数
plt.show()
plt.imshow(Image.open('examples.png'))    # 实际上plt.imshow可以直接显示PIL格式图像
plt.show()   
import pylab as plt
import cv2
import numpy as np
img = cv2.imread('examples.png')
plt.imshow(img[..., -1::-1])    # 因为opencv读取进来的是bgr顺序呢的,而imshow需要的是rgb顺序,因此需要先反过来
plt.show()

2 cv2 - 不用考虑了,pylab.imshow方便多了

灰度图-RGB图相互转换

1 PIL.Image

from PIL import Image
img = Image.open('examples.png')
img_gray = img.convert('L')    # RGB转换成灰度图像
img_rgb = img_gray.convert('RGB') # 灰度转RGB
print(img)
print(img_gray)
print(img_rgb)[out]
<PIL.PngImagePlugin.PngImageFile image mode=RGB size=987x824 at 0x7FC2CCAE04D0>
<PIL.Image.Image image mode=L size=987x824 at 0x7FC2CCAE0990>
<PIL.Image.Image image mode=RGB size=987x824 at 0x7FC2CCAE0250>

2 cv2(注意,opencv在读入图片的时候就可以通过参数实现颜色通道的转换,下面是用别的方式实现)

import cv2
import pylab as plt
img = cv2.imread('examples.png')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)    # BGR转灰度
img_bgr = cv2.cvtColor(img_gray, cv2.COLOR_GRAY2BGR)    # 灰度转BRG
img_rgb = cv2.cvtColor(img_gray, cv2.COLOR_GRAY2RGB)    # 也可以灰度转RGB

保存图片

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

from PIL import Image
img = Image.open('examples.png')
img.save('examples2.png')
img_gray = img.convert('L')
img_gray.save('examples_gray.png')    # 不管是灰度还是彩色,直接用save函数保存就可以,但注意,只有PIL格式的图片能够用save函数

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

import cv2
img = cv2.imread('examples.png')    # 这是BGR图片
cv2.imwrite('examples2.png', img)    # 这里也应该用BGR图片保存,这里要非常注意,因为用pylab或PIL读入的图片都是RGB的,如果要用opencv存图片就必须做一个转换
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imwrite('examples_gray.png', img_gray)


转载自https://www.jianshu.com/p/3977d674da85
來源:简书
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】base64模块对图片进行base64编码和解码

图片的base64编码就是可以将一副图片数据编码成一串字符串&#xff0c;使用该字符串代替图像地址。 这样做有什么意义呢&#xff1f;我们知道&#xff0c;我们所看到的网页上的每一个图片&#xff0c;都是需要消耗一个 http 请求下载而来的。 没错&#xff0c;不管如何&#xf…

Mysql错误2003 -Can't connect toMySQL server on 'localhost'(10061)解决办法

错误图片 昨天晚上还在用mysql来存储东西,而今天早上发现mysql数据库根本打不开,吓了我一大跳,本来就想重装mysql服务,但是我的数据库都没了,相当于大楼盖起来了,地基一下出现了裂缝,后来经过研究解决办法 如下 我发现mysql的服务一直无法启动如图 显示Cant connect toMySQL s…

【Python实战】使用python计算多种还款方式的还款计划

随着人们经济活动的增加&#xff0c;用钱的地方越来越多&#xff0c;不管是像买房这样的大额支出还是个人消费型支出&#xff0c;越来越多的人选择贷款来解决眼前的经济危机。 而申请贷款就涉及到选择不同的还款方式&#xff0c;所需要偿还的欠款综合也大有不同&#xff0c;那么…

python write报错a byte-like object is required.not str

办法一&#xff1a;根本原因是Python版本问题python2.x中要求用‘wb’&#xff0c;python3.x中要求用w 用open&#xff08;filename&#xff0c;‘w’&#xff09;方式 办法二&#xff1a;encode(ascii)

【Python】浮点数计算时的不准确性以及如何进行精确计算

浮点数一个普遍的问题就是在计算机的世界中&#xff0c;浮点数并不能准确地表示十进制。并且&#xff0c;即便是最简单的数学运算&#xff0c;也会带来不可控制的后果。因为&#xff0c;在计算机的世界中只认识0与1 因为在计算机里面&#xff0c;小数是不精确的&#xff0c;例如…

echarts自定义showlading()样式和文本

1、首先引入echarts.js 2、在页面定义自己的echarts变量 var myChart echarts.init(document.getElementById(main)); 3、自定义showLoading()样式 myChart.showLoading(default, {text:统计中&#xff0c;请稍候...,maskColor: #404a59,textColor: #fff,}); text:文本内…

【视频】视频基本参数介绍

视频&#xff08;Video&#xff09;泛指将一系列静态影像以电信号的方式加以捕捉、纪录、处理、储存、传送与重现的各种技术。 连续的图像变化每秒超过24帧&#xff08;frame&#xff09;画面以上时&#xff0c;根据视觉暂留原理&#xff0c;人眼无法辨别单幅的静态画面&#x…

测试人员做到这几点,线上80%的BUG将落入你手,企业将避免重大风险

BUG事故给敲了很大的警钟&#xff0c;也给公司带来重大损失&#xff0c;作为测试人员&#xff0c;我们如何提现发现线上BUG并及时解决&#xff0c;避免落入用户手中&#xff0c;给企业带来无法挽回的损失。 案例1&#xff1a; 1月20日凌晨&#xff0c;拼多多App因技术漏洞&am…

Django与jQuery通信;Django前后端传值

window.onloadfunction(){var user_info{{user_info|default_if_none:0}};if(user_info0){alert("您好没有登录&#xff01;");window.location.href"/login"; //跳转到登录界面} } 参考自&#xff1a;https://blog.csdn.net/PlusChang/article/details/7…

【Python】pysnooper模块对代码进行调试

一般情况下&#xff0c;在编写Python代码时&#xff0c;如果想弄清楚为什么Python代码没有按照预期执行的原因&#xff0c;比如你想知道哪些是正在运行&#xff0c;哪些没有运行&#xff0c;以及局部变量的值是什么... 通常我们会使用包含断点和观察模式等功能成熟的调试器&…

解决$ is not define

今天写js的时候&#xff0c;发现怎么也没有效果。然后我前端调试的时候报这样的错 $ is not define 这个错误我以前也出现过。所以就这个错误的解决&#xff0c;我来总结一下。 1.首先&#xff0c;"$"这个符号是在jquery中定义的。所以你要看一下&#xff0c;你有没…

模拟导入系统通讯录5000+手机号 校验大量数据处理

模拟导入系统通讯录5000手机号 校验大量数据处理 之前再测试一个导入手机通讯录系统时&#xff0c;随机抽了几个人的手机进行了测试&#xff0c;都导入显示正常 当公司BD进行项目试用时&#xff0c;导入通讯录一直处于下图加载中 1、于是进行抓包查看日志进行定位&#xff0c…

【股票】股票交易的手续费介绍以及计算

股票交易手续费是进行股票交易时所支付的手续费。委托买卖的手续费分“阶段式”和“跟价式”。(1)阶段式。根据股票价格和交易股数收取手续费。(2)跟价式。根据股票的交易金额收取手续费&#xff0c;目前世界上多采用跟价式。 我国目前主要是证券公司收取佣金和国家收取的印花税…

python3下使用cv2.imwrite存储带有中文路径图片或者绝对路径图片

由于imwrite前使用编码在python3中已经不适用&#xff0c;可用imencode代替&#xff0c;以下代码是从视频中获取第2帧保存在中文文件夹下的实例&#xff1a; 1 2 3 4 5 cap cv2.VideoCapture("***.mp4") cap.set(cv2.CAP_PROP_POS_FRAMES, 2) ret, framecap.read…

浅析python类继承(一)

面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力&#xff1a;它可以使用现有类的所有功能&#xff0c;并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”&#xff0c;被继承的类称为“基类”、“父…

【Python】常用的数据类型介绍以及它们之间相互转化

在学习一门语言的过程中&#xff0c;首先肯定就是要先接触到它所拥有的数据类型&#xff0c;Python拥有多种主要的数据类型&#xff0c;下面介绍一下下面9种数据类型&#xff0c;以及一些数据类型之间的转化。 目录 1、字符串 2、布尔类型 3、整数 4、浮点数 5、数字 6、列表 7…

django select option拼接时value中空格后的内容被截断

$new $("<option value"List[i] ">"List[i]"</option>" ); $("#project").append( $new ); 此时若value中的字符串有空格&#xff0c;则会被空格截断 解决方法&#xff1a; $new $("<option value"List…

Monkey随机性能压测初探(一)

Monkey介绍 Monkey程序由Android系统自带&#xff0c;是Android SDK提供的一个命令行工具&#xff0c; 可运行Android模拟器和实体设备上。Monkey会发送伪随机的用户事件流&#xff0c;通过Monkey程序模拟用户触摸屏幕、滑动、 按键等操作来对程序进行压力测试&#xff0c;检测…

【Java】使用前准备工作配置环境变量

我们要使用java前&#xff0c;必须先安装JDK并且配置相关的环境变量&#xff0c;如果我们未配置环境变量&#xff0c;那么我们在cmd命令中&#xff0c;输入javac&#xff0c;会提示“javac”不是内部或外部命令&#xff0c;这里主要介绍如何配置jdk的环境变量。 JDK官网下载&a…

怎么在html的img src=src的值这里调用js方法或变量获取图片地址

<html> <head>参考自 </head> <body> <img src"?" id"img"> </body> <script language"javascript"> var adres"图片地址"; document.getElementById(img).src adres; </sc…