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. Xshell6和Xftp6初步使用

    Xshell6和Xftp6初步使用 一.Xshell6和Xftp6介绍: Xshell6:可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的. Xftp6:是 ...

  2. 认识Nodejs

    一.概念 ①JavaScript运行环境:Node.js不是一门语言,不是库也不是框架,是一个JavaScript运行环境,简单点来讲就是Node.js可以解析执行JavaScript代码,也就是说J ...

  3. 在AD中设置漫游配置文件与文件夹重定向

    在域环境下,域用户可以在域中的任意一台客户端计算机上登录,由于普通域用户的权限比较低,在大多数情况下只能对自己的用户配置文件具有完全控制权限,因而大多数域用户都是将数据直接保存在用户配置文件中.用户配 ...

  4. 洛谷P1854 花店橱窗布置

    题目 DP,直接递推比记忆化搜索简单. 定义状态\(dp[i][j]\)为前i行最后一个选择第i行第j个数所得到最大值. 易得状态转移方程 \(dp[i][j]=max(dp[i-1][k]+a[i] ...

  5. 【cf补题记录】A. Hotelier

    思考之后再看题解,是与别人灵魂之间的沟通与碰撞 A. Hotelier 题意 给出长度为n的字符串,字符串由'L'.'R'以及数字0~9组成.旅馆有10间房子,L代表客人从左边入住,R代表客人从右边入 ...

  6. 超级简单的tab点击

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 在js中添加HTML类样式

    有时候需要给元素添加类样式,但又要保留之前的类,可以使用element.classList.add("类名");

  8. Alpha2

    队名:福大帮 组长博客链接:https://www.cnblogs.com/mhq-mhq/p/11885037.html 作业博客 :https://edu.cnblogs.com/campus/f ...

  9. 转:【微信公众号】微信snsapi_base静默授权与snsapi_userinfo网页授权的实现(不建议使用静默,直接用主动比较方便)

    版权声明:本文为CSDN博主「小璐謌」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/qq_37462176/ ...

  10. sklearn逻辑回归(Logistic Regression,LR)调参指南

    python信用评分卡建模(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_ca ...