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. [RN] React Native 常见基本问题归纳总结

    [RN] React Native  常见基本问题归纳总结 本问题总结涉及到版本为: "react": "16.8.3","react-native& ...

  2. CF1237C2 【Balanced Removals (Harder)】

    这么妙的题怎么没人发题解啊 首先这是三维的,我们可以对其进行降维打击 先考虑一维怎么做? 我们可以对其该维坐标进行排序,按照顺序输出,可能会多余一个 那拓展到二维呢? 我们可以把它转化成一维,分成很多 ...

  3. [bzoj1008] 越狱

    Description 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 数据 ...

  4. 64、Spark Streaming:StreamingContext初始化与Receiver启动原理剖析与源码分析

    一.StreamingContext源码分析 ###入口 org.apache.spark.streaming/StreamingContext.scala /** * 在创建和完成StreamCon ...

  5. c++ 题解

    43题 #include <random> #include <iostream> int main() { ][] = { {,,,}, {,,,}, {,,,}}; ; n ...

  6. Python入门(一)-打开世界之Hello World

    关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 本篇文章同步微信公众号  欢迎大家关注我的微信公众号:「醉翁猫咪」 今天我们来用Python向世界说声Hello World,人生 ...

  7. Python 元类使用讲解

    我要一大群的类都具有一种特点,我怎么给他们加上呢?模板嘛,我从这个模板创建一群类不就OK了?那就需要元类了. 定义一个元类(就是一个类的模板!莫多想,还要记住这是类级别的,不是对象级别的!):代码如下 ...

  8. Java运算符和类型转换

    以下代码输出结果是: public class Test { public static void main(String[] args) { int a = 5; System.out.printl ...

  9. 刷题记录:[CISCN2019 总决赛 Day2 Web1]Easyweb

    目录 刷题记录:[CISCN2019 总决赛 Day2 Web1]Easyweb 一.涉及知识点 1.敏感文件泄露 2.绕过及sql注入 3.文件上传:短标签绕过php过滤 刷题记录:[CISCN20 ...

  10. 【Nginx】Nginx服务器配置调优

    1.Nginx服务器配置调优 .设置nginx全局参数 vi /usr/local/nginx/conf/nginx.conf #编辑 worker_processes ; # 工作进程数,为CPU的 ...