Python+OpenCV 图像处理系列(1)— Ubuntu OpenCV安装、图片加载、显示和保存
Ubuntu 16.04 下安装 Opencv
sudo apt-get install libopencv-dev
sudo apt-get install python-opencv
或者使用 pip
安装, 此时会安装最新的 OpenCV 版本
sudo pip install opencv-python
概述
生活中图像都是由 RGB
三原色构成的,R
表示红色(Red),G
表示绿色 (Green), B
表示蓝色(Blue)。计算机中 RGB
这三个颜色的取值通常是在 0-255 之间。
彩色图片有三个通道,所以属于三通道图片。计算机中的像素值通常是用 8 位的无符号整形表示,取值范围是 0-255,假设将图片颜色从黑到白分成 256 级,即通常说的黑白图片,也叫单通道图片,0 表示最黑,1 表示最白。
RGB
的构成示例 (0, 255, 255)第一个元素表示红色的数值,第二个元素表示绿色的数值,第三个元素表示蓝色的数值。
在自然界中肉眼所能看到的任何色彩都可以由这三种色彩叠加而成,因此也被称为加色原理。比如黄色,可以通过红色和绿色相加,全红色为(255,0,0),全绿色为(0,255,0),全黄色为(255,255,0)。
每个图片都是由于很多个 3 个通道的彩色像素组成,可以将图片看成一个矩阵,其中每个像素对应矩阵中的一个位置,譬如:
图片左上角的像素点位置是(0, 0)
图片右上角的像素点位置是(1079, 0)
图片左下角的像素点位置是(0, 1439)
图片右下角的像素点位置是(1079, 1439)
数字图像有两个分辨率,图像分辨率与输出分辨率。
图像分辨率指的是每英寸的像素数,简写为
ppi
,我们平常说一张图片大小的时候使用的就是图像分辨率。输出分辨率指的是设备输出图像时每英寸可产生的点数,简写为
dpi
,这是在印刷行业,摄影行业常用的分辨率,摄影行业通常要求DPI
不低于 300。
相同的图像分辨率,更高的 DPI
表现为物理尺寸更小。因为这个时候每英寸点更多,像素变小。
1. 加载图片
使用下面函数读入图像
cv2.imread(img_path, read_type)
函数接受两个参数:
img_path
: 图片的相对路径或者绝对路径read_type
: 读取图片的类型,包括以下几个参数:cv2.IMREAD_COLOR
:读入一副彩色图像。图像的透明度会被忽略,这是默认参数;cv2.IMREAD_GRAYSCALE
:以灰度模式读入图像;cv2.IMREAD_UNCHANGED
:读入一幅图像,并且包括图像的alpha
通道;
示例:
import cv2# Load an color image in grayscale
img = cv2.imread('test.jpg', 0)
就算图像的路径是错的,OpenCV
也不会提醒你,但是当你使用命令 print img
时得到的结果是 None
。
2. 显示图片
使用下面函数显示图像
cv2.imshow()
窗口会自动调整为图像大小。第一个参数是窗口的名字,其次才是我们的图像。你可以创建多个窗口,只要你喜欢,但是必须给它们不同的名字。
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey()
是一个键盘绑定函数。
需要指出的是它的时间尺度是毫秒级
。
函数等待特定的几毫秒,看是否有键盘输入。特定的几毫秒之内,
- 如果按下任意键,这个函数会返回按键的
ASCII
码值,程序将会继续运行。 - 如果没有键盘输入,返回值为 -1,
如果我们设置这个函数的参数为 0,那它将会无限期的等待键盘输入。它也可以被用来检测特定键是否被按下,例如按键 a 是否被按下。
cv2.destroyAllWindows()
可以轻易删除任何我们建立的窗口。
cv2.destroyWindow()
用于删除特定的窗口,可以使用在括号内输入你想删除的窗口名。
一种特殊的情况是,你也可以先创建一个窗口,之后再加载图像。这种情况下, 你可以决定窗口是否可以调整大小。使用到的函数是
cv2.namedWindow()
初始设定函数标签是 cv2.WINDOW_AUTOSIZE
, 但是如果你把标签改成 cv2.WINDOW_NORMAL
,你就可以调整窗口大小了。当图像维度太大,或者要添加轨迹条时,调整窗口大小将会很有用。
import cv2cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
3. 保存图片
使用下面函数保存图片
cv2.imwrite(filename, img)
第一个参数是要保存的文件名,第二个参数是图像在内存中的对象。
4. 实践
import cv2img = cv2.imread('messi5.jpg',0)
cv2.imshow('image',img)
k = cv2.waitKey(0)
if k == 27: # wait for ESC key to exitcv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exitcv2.imwrite('messigray.png',img)cv2.destroyAllWindows()
Python+OpenCV 图像处理系列(1)— Ubuntu OpenCV安装、图片加载、显示和保存相关推荐
- Python机器视觉--OpenCV入门--OpencCV的安装与图片加载显示
1. 安装OpenCV 执行pip install opencv-python==3.4.1.15, 3.4.2之后有些算法申请了专利,用不了了.(使用其他版本也可以) 安装opencv扩展包(选装) ...
- Launcher3 安装App加载显示过程分析,androidstudio开发app实例
"Initializing LauncherAppState in the absence of LauncherProvider"); } Log.v(Launcher.TAG, ...
- opencv图像处理时使用stringstream批量读取图片,处理后并保存
简介: 同文件输入输出流一样,使用stringstream可以批量读取图片,处理后并进行保存.因为C++中头文件 stringstream既可以从string读数据也可向string写数据,利于其这个 ...
- python中cv2、Image和plt的图片打开、显示和保存
使用cv2.Image.plt打开.显示和保存图片 文章目录 使用cv2.Image.plt打开.显示和保存图片 0.读取图片 1.使用cv2显示cv2打开的图片 2.使用cv2显示Image打开的图 ...
- OpenCV与图像处理学习一——图像基础知识、读入、显示、保存图像、灰度转化、通道分离与合并
OpenCV与图像处理学习一--图像基础知识.读入.显示.保存图像.灰度转化.通道分离与合并 一.图像基础知识 1.1 数字图像的概念 1.2 数字图像的应用 1.3 OpenCV介绍 二.图像属性 ...
- Opencv 图片 读取,显示,保存基本操作
Opencv的图片读取,显示,保存是图片操作的基础,实验用的图片来自于lenan:http://www.lenna.org/ 为了使用方 便,主要是使用opencv的python版本的接口,其官网链接 ...
- OpenCV:01图片视频的加载显示
文章目录 **学习目标:** 图像与视频的加载显示 导入OpenCV的包`cv2` 窗口操作 计算按键的`ASCII`值 读取图片 用其他插件来读取(以`matplotlib`为例) 用`OpenCV ...
- android图像处理系列之五-- 给图片添加边框(中)
前面一篇讲到给图片加边框的方式,只能给图片加一些有规则的边框,如果想加一些比较精美的效果,就有点麻烦了.下面就给出解决这个问题的思路. 思路是:一些比较精美的花边图片我们是很难用代码控制,就目前本人水 ...
- Android应用开发提高系列(5)——Android动态加载(下)——加载已安装APK中的类和资源...
前言 Android动态加载(下)--加载已安装APK中的类和资源. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://ov ...
- android图像处理系列之五--给图片添加边框(中)
前面一篇讲到给图片加边框的方式,只能给图片加一些有规则的边框,如果想加一些比较精美的效果,就有点麻烦了.下面就给出解决这个问题的思路. 思路是:一些比较精美的花边图片我们是很难用代码控制,就目前本人水 ...
最新文章
- 周志华等人提出可微XGBoost算法sGBM,速度提升、准确率更胜一筹
- mp4v2再学习 -- H264视频编码成MP4文件
- mysql查询条件为or_使用mysql查询where条件里的or和and
- MapGuide 浏览器可接受参数分析
- 查看某个进程的线程在干什么_有了多线程,为什么还要有协程?
- npm 查看登陆账号_自定义npm 及问题整理
- 社区发现(三)--CMP
- 【转】每天一个linux命令(28):tar命令
- 华为那些手机有鸿蒙系统,华为鸿蒙系统支持哪些手机 鸿蒙系统支持哪些手机型号...
- 山西台达plc可编程控制器_PLC可编程控制器常见的应用领域
- jle汇编_X86汇编指令
- 木瓜移动跨境行业一周咨讯:字节跳动旗下Fanno欧洲上线、亚马逊中国黑五战绩优秀
- 精通CSS.DIV网页样式与布局(二)—— 段落
- 《Accurate eye center localisation by means of gradients》论文阅读
- Vue常用的组件库大全【前端工程师必备】【实时更新】【移动端、PC端(web端)、数据可视化组件库(数据大屏) 、动画组件库、3D组件库】
- rm -rf是什么意思?
- 作业5 - 团队展示
- 浅谈Linux USB设备驱动
- beyond compare 4 license 过期解决办法
- 企业微信hook接口,协议开发,群操作功能教程
热门文章
- 2022-2028年中国急救中心行业发展战略规划及未来前景展望报告
- RPC 笔记(07)— socket 通信(多进程服务器)
- Linux shell 学习笔记(16)— shell 入门总结
- Go 学习笔记(77)— Go 第三方库之 cronexpr(解析 crontab 表达式,定时任务)
- 【机器学习】【条件随机场CRF-3】条件随机场的参数化形式详解 + 画出对应的状态路径图 + 给出对应的矩阵表示...
- PyTorch学习笔记——softmax和log_softmax的区别、CrossEntropyLoss() 与 NLLLoss() 的区别、log似然代价函数...
- 聊一聊Spring中的线程安全性
- SpringBoot-web开发(一): 静态资源的导入(源码分析)
- 接触追踪解决方案建立在UWB而不是蓝牙上
- CUDA运行时 Runtime(四)