opencv学习笔记D01


@

opencv,Open Source Computer Vision Library.OpenCV于1999年由Intel建立。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、MacOS操作系统上。它轻量级而且高效——由一系列 C 函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

一、图片读取

cv2.imread(path, flag)

flag默认为1。另外一个需要注意的是opencv是以bgr三通道打开图像,注意bgr与rgb的相互转换。

import cv2

img = cv2.imread('path', cv2.IMREAD_COLOR)
img = cv2.imread('path', 0)
# flag有三种模式
# cv2.IMREAD_COLOR, flag=1, 加载一副彩色的图像,透明度会被忽略,如jpg图像。默认使用这种模式打开
# cv2.IMREAD_GRAYSCALE, flage=0, 以灰度加载一张图像
# cv2.IMREAD_UNCHANGED, 加载一副彩色图像,同时还会有透明度通道,如png图像

二、图片保存

cv2.imwrite(存储路径, 图像变量, [, 存盘标识])

cv2.imwrite('path', img)
cv2.imwrite('path', img, cv2.IMWRITE_JPEG_QUALITY=95)
# 存盘标识有三种。最常用的就是保存为.jpg和.png两种
# 1.cv2.IMWRITE_JPEG_QUALITY 设置图片格式为jpeg,或jpg,其值0-100,数值越大质量越高,默认95
# 2.cv2.IMWRITE_WEBP_QUALITY
# 3.cv2.IMWRITE_PNG_COMPRESSION 设置图片格式为png,其值0-9,为压缩等级,默认为3

这就意味着,保存图片的过程中都是有损压缩过的,图像精度会有影响。比如一个严格意义上的二值图像,0或255,但是保存之后就不止只有0和255了。

三、图片展示

cv2.imshow('window_name', img)

# 特别注意的是cv2.nameWindow中的第一个参数要和cv2.imshow中的第一个参数一致。
# 大致可以理解为先打开一个窗口,命名一个名字,然后进行展示图像。
# 第二个参数有两种模式:
# cv2.WINDOW_NORMAL标识窗口大小可调节,或者使用另外一种模式
# cv2.WINDOW_AUTOSIZE根据原图大小进行展示
cv2.namedWindow('window_name', cv2.WINDOW_NORMAL)
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destoryAllWindows()

四、图片缩放

cv2.resize(src, dsize, interpolation=)

图片的缩放一般使用的方式有两种:第一种就是缩放成固定大小;第二种就是按比例缩放

缩放过程中有五种插值方式:

  1. cv2.INTER_NEAREST 最近邻插值
  2. cv2.INTER_LINEAR 线性插值
  3. cv2.INTER_AREA 基于局部像素的重采样,区域插值
  4. cv2.INTER_CUBIC 基于邻域4x4像素的三次插值
  5. cv2.INTER_LANCZOS4 基于8x8像素邻域的Lanczos插值
cv2.resize(img, (300, 300), interpolation=cv2.INTER_LINEAR)	# 默认的使用双线性插值
cv2.resize(img, fx=0.5, fy=0.5)

五、四种常用插值方式的比较

OpenCV的resize函数支持多种插值方式,这里主要比较下面四个常用的插值方式。

参考资料:《OpenCV中resize函数五种插值算法的实现过程》https://blog.csdn.net/fengbingchun/article/details/17335477

1、最近邻插值

最近邻插值是最简单的插值方法,选取离目标点最近的点作为新的插入点。

变换后:

2、双线性插值

线性插值是以距离为权重的一种插值方式。如果想要深入地理解,可以先回顾一下线性插值。

3、区域插值

区域插值共分三种情况,图像放大时类似于双线性插值,图像缩小(x轴、y轴同时缩小)又分两种情况,此情况下可以避免波纹出现。因此对图像进行缩小时,为了避免出现波纹现象,推荐采用区域插值方法。

如果要缩小图像,通常推荐使用INTER_AREA插值效果最好,而要放大图像,通常使用INTER_CUBIC(速度较慢,但效果最好),或者使用INTER_LINEAR(速度较快,效果还可以)

4、三次样条插值

可以在看过双线性插值之后,再来看三次样条插值。

我是尾巴:

参考博客:https://blog.csdn.net/guyuealian/article/details/85097633

一个人在某一种环境中待久了,就很容易说服自己是某一种人,稍想变得不一样,先不提自己的感受,光是周围的敏感与不适应,就足以让自己缩回十几年不变的藏身之处。

最后推荐:

这次推荐的是两款markdown写作软件,一个是typora,一个是markdownpad。

typora

markdownpad

坚持把opencv做个完整笔记!

opencv学习笔记D01的更多相关文章

  1. opencv学习笔记(七)SVM+HOG

    opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...

  2. opencv学习笔记(六)直方图比较图片相似度

    opencv学习笔记(六)直方图比较图片相似度 opencv提供了API来比较图片的相似程度,使我们很简单的就能对2个图片进行比较,这就是直方图的比较,直方图英文是histogram, 原理就是就是将 ...

  3. opencv学习笔记(五)镜像对称

    opencv学习笔记(五)镜像对称 设图像的宽度为width,长度为height.(x,y)为变换后的坐标,(x0,y0)为原图像的坐标. 水平镜像变换: 代码实现: #include <ios ...

  4. opencv学习笔记(四)投影

    opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: #include <cv.h> #include <highgui.h> using namespace ...

  5. opencv学习笔记(三)基本数据类型

    opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...

  6. opencv学习笔记(二)寻找轮廓

    opencv学习笔记(二)寻找轮廓 opencv中使用findContours函数来查找轮廓,这个函数的原型为: void findContours(InputOutputArray image, O ...

  7. opencv学习笔记(一)IplImage, CvMat, Mat 的关系

    opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...

  8. paper 93:OpenCV学习笔记大集锦

    整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址: ...

  9. (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU

          首页 视界智尚 算法技术 每日技术 来打我呀 注册     OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...

随机推荐

  1. WinDbg常用命令系列---显示局部变量dv

    dv (Display Local Variables) dv命令显示当前作用域中所有局部变量的名称和值. dv [Flags] [Pattern] 参数: Flags显示其他信息.可以包括以下任何区 ...

  2. 认知升级:提升理解层次的NLP思维框架

    NLP(神经语言程序学)是由理查德·班德勒和约翰·格林德在1976年创办的一门学问,美国前总统克林顿.微软领袖比尔盖茨.大导演斯皮尔博格等许多世界名人都接受过 NLP培训,世界500强企业中的 60% ...

  3. CURL shell 使用

    #! /bin/bash requrl="http://www.baidu.com/xxxxxx" while true do html=$(curl -s "$requ ...

  4. hdu1237 简单计算器[STL 栈]

    目录 题目地址 题干 代码和解释 参考 题目地址 hdu1237 题干 代码和解释 解本题时使用了STL 栈,要记得使用#include<stack>. 解本题时使用了isdigit()函 ...

  5. a标签伪类选择器+过度模块

    a标签的伪类选择器 1.什么是a标签的伪类选择器?a标签的伪类选择器是专门用来修改a标签不同状态的样式的. 2.格式: 1):link 修改从未被访问过状态下的样式. 2):visited 修改被访问 ...

  6. 2019_软工实践_Beta收官

    简介 组名:955 组长博客:点这里! 成员 031702329庄锡荣(组长) 031702309林晓锋 031702309侯雅倩 031702311陈珊珊 171709030吴珂雨 03170231 ...

  7. Python3 fake_useragent 模块的使用和报错解决方案

    在使用 Python 做爬虫的时候,我们需要伪装头部信息骗过网站的防爬策略,Python 中的第三方模块 fake_useragent 就很好的解决了这个问题,它将给我们返回一个随机封装了好的头部信息 ...

  8. TOMCAT 可以稳定支持的最大并发用户数

      微软系统平台上 TOMCAT性能调优后可以稳定支持的最大并发用户数量在300人服务器配置:   单硬盘,SATA 8MB缓存测试服务器和loadrunner运行服务器位于同一网段 100MB网络( ...

  9. grandle Project sync failed.please fix your project and try again

    Android Studio导入项目或者新建项目想运行的时候可能会报错Gradle project sync failed. Please fix your project and try again ...

  10. 带空格的 jquery ID 选择器

    当 DOM ID有一个空格时,如何使用 jquery 的 ID 选择器? 例如,我的 DOM ID 是 <div id="content Module">Stuff&l ...