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安装、图片加载、显示和保存相关推荐

  1. Python机器视觉--OpenCV入门--OpencCV的安装与图片加载显示

    1. 安装OpenCV 执行pip install opencv-python==3.4.1.15, 3.4.2之后有些算法申请了专利,用不了了.(使用其他版本也可以) 安装opencv扩展包(选装) ...

  2. Launcher3 安装App加载显示过程分析,androidstudio开发app实例

    "Initializing LauncherAppState in the absence of LauncherProvider"); } Log.v(Launcher.TAG, ...

  3. opencv图像处理时使用stringstream批量读取图片,处理后并保存

    简介: 同文件输入输出流一样,使用stringstream可以批量读取图片,处理后并进行保存.因为C++中头文件 stringstream既可以从string读数据也可向string写数据,利于其这个 ...

  4. python中cv2、Image和plt的图片打开、显示和保存

    使用cv2.Image.plt打开.显示和保存图片 文章目录 使用cv2.Image.plt打开.显示和保存图片 0.读取图片 1.使用cv2显示cv2打开的图片 2.使用cv2显示Image打开的图 ...

  5. OpenCV与图像处理学习一——图像基础知识、读入、显示、保存图像、灰度转化、通道分离与合并

    OpenCV与图像处理学习一--图像基础知识.读入.显示.保存图像.灰度转化.通道分离与合并 一.图像基础知识 1.1 数字图像的概念 1.2 数字图像的应用 1.3 OpenCV介绍 二.图像属性 ...

  6. Opencv 图片 读取,显示,保存基本操作

    Opencv的图片读取,显示,保存是图片操作的基础,实验用的图片来自于lenan:http://www.lenna.org/ 为了使用方 便,主要是使用opencv的python版本的接口,其官网链接 ...

  7. OpenCV:01图片视频的加载显示

    文章目录 **学习目标:** 图像与视频的加载显示 导入OpenCV的包`cv2` 窗口操作 计算按键的`ASCII`值 读取图片 用其他插件来读取(以`matplotlib`为例) 用`OpenCV ...

  8. android图像处理系列之五-- 给图片添加边框(中)

    前面一篇讲到给图片加边框的方式,只能给图片加一些有规则的边框,如果想加一些比较精美的效果,就有点麻烦了.下面就给出解决这个问题的思路. 思路是:一些比较精美的花边图片我们是很难用代码控制,就目前本人水 ...

  9. Android应用开发提高系列(5)——Android动态加载(下)——加载已安装APK中的类和资源...

    前言  Android动态加载(下)--加载已安装APK中的类和资源. 声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://ov ...

  10. android图像处理系列之五--给图片添加边框(中)

    前面一篇讲到给图片加边框的方式,只能给图片加一些有规则的边框,如果想加一些比较精美的效果,就有点麻烦了.下面就给出解决这个问题的思路. 思路是:一些比较精美的花边图片我们是很难用代码控制,就目前本人水 ...

最新文章

  1. 周志华等人提出可微XGBoost算法sGBM,速度提升、准确率更胜一筹
  2. mp4v2再学习 -- H264视频编码成MP4文件
  3. mysql查询条件为or_使用mysql查询where条件里的or和and
  4. MapGuide 浏览器可接受参数分析
  5. 查看某个进程的线程在干什么_有了多线程,为什么还要有协程?
  6. npm 查看登陆账号_自定义npm 及问题整理
  7. 社区发现(三)--CMP
  8. 【转】每天一个linux命令(28):tar命令
  9. 华为那些手机有鸿蒙系统,华为鸿蒙系统支持哪些手机 鸿蒙系统支持哪些手机型号...
  10. 山西台达plc可编程控制器_PLC可编程控制器常见的应用领域
  11. jle汇编_X86汇编指令
  12. 木瓜移动跨境行业一周咨讯:字节跳动旗下Fanno欧洲上线、亚马逊中国黑五战绩优秀
  13. 精通CSS.DIV网页样式与布局(二)—— 段落
  14. 《Accurate eye center localisation by means of gradients》论文阅读
  15. Vue常用的组件库大全【前端工程师必备】【实时更新】【移动端、PC端(web端)、数据可视化组件库(数据大屏) 、动画组件库、3D组件库】
  16. rm -rf是什么意思?
  17. 作业5 - 团队展示
  18. 浅谈Linux USB设备驱动
  19. beyond compare 4 license 过期解决办法
  20. 企业微信hook接口,协议开发,群操作功能教程

热门文章

  1. 2022-2028年中国急救中心行业发展战略规划及未来前景展望报告
  2. RPC 笔记(07)— socket 通信(多进程服务器)
  3. Linux shell 学习笔记(16)— shell 入门总结
  4. Go 学习笔记(77)— Go 第三方库之 cronexpr(解析 crontab 表达式,定时任务)
  5. 【机器学习】【条件随机场CRF-3】条件随机场的参数化形式详解 + 画出对应的状态路径图 + 给出对应的矩阵表示...
  6. PyTorch学习笔记——softmax和log_softmax的区别、CrossEntropyLoss() 与 NLLLoss() 的区别、log似然代价函数...
  7. 聊一聊Spring中的线程安全性
  8. SpringBoot-web开发(一): 静态资源的导入(源码分析)
  9. 接触追踪解决方案建立在UWB而不是蓝牙上
  10. CUDA运行时 Runtime(四)