Python下的OpenCV学习 02 —— 图像的读取与保存
OpenCV提供了众多对图片操作的函数,其中最基本的就是图片的读取与输出了。
一、读取图片
利用OpenCV读取一张图片是非常容易的,只需要用到 imread() 函数,打开shell或者cmd,进入python,输入help(cv2.imread)获取该函数的文档,得到:
imread(...)
imread(filename[, flags]) -> retval
可见, imread需要提供两个参数,第一个是图片的路径,第二个是图片读取的模式(flags),函数返回一个存储着图片像素数据的矩阵。
flags有三个值:
- cv2.IMREAD_COLOR 加载彩色图片,透明度将被舍弃
- cv2.IMREAD_GRAYSCALE 灰度模式
- cv2.IMREAD_UNCHANGED 完整的加载一张图片,包括alpha通道值(用来表示透明度)
这三个flags还可以分别用1,0,-1代替
img = cv2.imread("test.jpg", cv2.IMREAD_GRAYSCALE)
img = cv2.imread("test.jpg", 0)
# 这两者是等价的
现在,我们已经获得了图像test.jpg的数据,存储在img中。img实际上是一个numpy的array数组,它包含着每个像素点的数据(如果是彩色模式,则包括了bgr值,灰度模式则是灰度值)。我们可以通过下标访问每一个像素点的数据,对每一个像素点进行更改操作。
二、在窗口中展示图片
在加载图片之后,我们可以利用 imshow() 函数把加载的图片展示出来,同样的,我们利用help(cv2.imshow)来查看该函数的用法:
imshow(...)
imshow(winname, mat) -> None
imshow需要两个参数,第一个是窗口的名字(winname),第二个是图片的像素矩阵(mat),函数没有返回值。imshow()会创建一个窗口,并在该窗口中把图片展示出来,我们不用操心图片是彩色的还是灰色,OpenCV会自动推导出图片数据的模式。那我们现在把之前存储在img里的图片展示出来:
cv2.imshow("test", img)
cv2.waitKey(0) # 等待用户按下按键
cv2.destroyAllWindows() # 关闭所有窗口
展示效果: 原图:

我们可以看到,原来透明的像素点都变成黑色了,这是因为灰度模式下透明度信息被舍弃,原来透明的像素点的值变为0,也就变成了黑色(255是白色)
三、保存图片
我们获得了一张灰色的图片,如果想要把它保存下来,应该怎么做呢?这时候就需要利用 imwrite() 函数,python环境下输入help(cv2.imwrite),得到:
imwrite(...)
imwrite(filename, img[, params]) -> retval
filename为输出图片的名字,img为要输出的图片,params为图片格式的参数,如果图片写入成功则返回True,否则返回False。
我们把这张灰度图像保存为gray.jpg:
cv2.imwrite("gray.jpg", img)
Python下的OpenCV学习 02 —— 图像的读取与保存的更多相关文章
- Python下的OpenCV学习 01 —— 在Linux下安装OpenCV
一.OpenCV简要介绍 OpenCV是一个跨平台的计算机视觉库,可以运行在Windows.Linux.MacOS等操作系统上.OpenCV提供了众多语言的接口,其中就包含了Python,Python ...
- 【python下使用OpenCV实现计算机视觉读书笔记4】保存摄像头视频
读取摄像头内容,然后保存一段十秒钟的视频. import cv2 cameraCapture = cv2.VideoCapture(0) fps = 30 # an assumption size = ...
- Python学习---Python下[元组]的学习
元组是不可变的, 用小括号()定义,而且一旦定义 ,不可变[类型是tuple] [元组看做一个整体,不可拆分,不可赋值,但可以全部重新赋值] 通过圆括号,用逗号分隔,常用在使语句或用户定义的函数能够安 ...
- 【python下使用OpenCV实现计算机视觉读书笔记2】图像与字节的变换
import cv2 import numpy import os # Make an array of 120,000 random bytes. randomByteArray = bytearr ...
- opencv学习(六)——图像基本操作
图像基本操作 一.访问和修改像素值 先来理解一下,图像与一般的矩阵或张量有何不同(不考虑图像的格式,元数据等信息).首先,一张图像有自己的属性,宽,高,通道数.其中宽和高是我们肉眼可见的属性,而通道数 ...
- python下用OpenCV的圆形检测
写在文章前 这些天因为工作需要要学习图像检测,笨笨的我啥都不会要盯着OpenCV重头开始学(:′⌒`),甚至查资料能力都很弱弱〒▽〒 夸一下我最好的男票(*^▽^*) 男盆友也不是做图像处理的 但是 ...
- opencv学习笔记——图像缩放函数resize
opencv提供了一种图像缩放函数 功能:实现对输入图像缩放到指定大小 函数原型: void cv::resize ( InputArray src, OutputArray dst, Size ds ...
- opencv学习(一)——图像入门
图像入门 一.读取图像 在opencv中使用cv.imread(filename, flags)函数读取图像.filename参数表示读取图像的路径.读取图像的路径应完整给出,且不能含有中文,否则在调 ...
- opencv学习笔记-图像对比度、亮度调节
在数学中我们学过线性理论,在图像亮度和对比度调节中同样适用,看下面这个公式: 在图像像素中其中: 参数f(x)表示源图像像素. 参数g(x) 表示输出图像像素. 参数a(需要满足a>0)被称为增 ...
随机推荐
- MySQL常用基本命令
启动MySQL /etc/init.d/mysqld start 优雅的关闭数据库的方法 1:使用MySQLadmin mysqladmin -uroot -p123456 shutdown 2:使用 ...
- Java中的二进制及基本的位运算
Java中的二进制及基本的位运算 二进制是计算技术中广泛采用的一种数制.二进制数据是用0和1两个数码来表示的数.它的基数为2,进位规则是"逢二进一",借位规则是"借一当二 ...
- docker~Dockerfile方式建立镜像HelloWorld
回到目录 Dockerfile可以便捷的建立一个image,它可以在一个镜像基础上,去构建另一个镜像,这也许就是它的特色,也是docker的本意! 我们下载一个mono的镜像 docker pull ...
- linux shell变量$#,$@,$0,$1,$2的含义解释
变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行的命令的结束代码(返回值) $- 使用Set命令设定的Flag一览 ...
- 设计模式的征途—14.职责链(Chain of Responsibility)模式
相信大家都玩过类似于“斗地主”的纸牌游戏,某人出牌给他的下家,下家看看手中的牌,如果要不起,则将出牌请求转发给他的下家,其下家再进行判断.一个循环下来,如果其他人都要不起该牌,则最初的出牌者可以打出新 ...
- RxSwift 系列(五) -- Filtering and Conditional Operators
前言 本篇文章将要学习RxSwift中过滤和条件操作符,在RxSwift中包括了: filter distinctUntilChanged elementAt single take takeLast ...
- 各种demo:css实现三角形,css大小梯形,svg使用
各种demo: 1.css实现正方形 思路:width为0:height为0:使用boder-width为正方形的边长的一半,不占任何字节:border-style为固体:border-color为正 ...
- 【CSS】整屏大背景
1. 利用div的层次,设置底层div充满屏幕,并给div设置背景图 <div id="Layer1" style="position:absolute;top:0 ...
- 用java写一个用户登陆界面
一.课堂测试源代码及其结果截图 用java的swing写一个用户登录界面,采用网格布局.源代码如下: /** * */package LiuLijia; import java.awt.CardLay ...
- js中常用的日期总结
js开发中经常用到日期,这里总结一下: /** * 获取当前日期 * 格式:2017-07-31 13:45:14 */ function getNowFormatDate() { var date ...