opencv学习笔记D01
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=)
图片的缩放一般使用的方式有两种:第一种就是缩放成固定大小;第二种就是按比例缩放
缩放过程中有五种插值方式:
- cv2.INTER_NEAREST 最近邻插值
- cv2.INTER_LINEAR 线性插值
- cv2.INTER_AREA 基于局部像素的重采样,区域插值
- cv2.INTER_CUBIC 基于邻域4x4像素的三次插值
- 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。
坚持把opencv做个完整笔记!
opencv学习笔记D01的更多相关文章
- opencv学习笔记(七)SVM+HOG
opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...
- opencv学习笔记(六)直方图比较图片相似度
opencv学习笔记(六)直方图比较图片相似度 opencv提供了API来比较图片的相似程度,使我们很简单的就能对2个图片进行比较,这就是直方图的比较,直方图英文是histogram, 原理就是就是将 ...
- opencv学习笔记(五)镜像对称
opencv学习笔记(五)镜像对称 设图像的宽度为width,长度为height.(x,y)为变换后的坐标,(x0,y0)为原图像的坐标. 水平镜像变换: 代码实现: #include <ios ...
- opencv学习笔记(四)投影
opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: #include <cv.h> #include <highgui.h> using namespace ...
- opencv学习笔记(三)基本数据类型
opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...
- opencv学习笔记(二)寻找轮廓
opencv学习笔记(二)寻找轮廓 opencv中使用findContours函数来查找轮廓,这个函数的原型为: void findContours(InputOutputArray image, O ...
- opencv学习笔记(一)IplImage, CvMat, Mat 的关系
opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...
- paper 93:OpenCV学习笔记大集锦
整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址: ...
- (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU
首页 视界智尚 算法技术 每日技术 来打我呀 注册 OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...
随机推荐
- [NOI2019]回家路线
[NOI2019]回家路线 题目大意: 有\(n\)个站点,\(m\)趟车,每趟车在\(p_i\)时从\(x_i\)出发,\(q_i\)时到达\(y_i\). 若小猫共乘坐了\(k\)班列车,依次乘坐 ...
- 2017.10.2 国庆清北 D2T1 (a*b)|x
在电脑上后面仨点过不了,要用I64d,lld会炸.但是洛谷上要用lld,LINUX系统没有I64d /* 求一个数对满足 (a*b)|n,也就是求三个数 a*b*c=n,那么求1~n之间的,就是a*b ...
- 微信小程序 Flex局部元素被挤压问题
关于Flex布局不在此处赘述,需要了解的可以查阅官方文档:基本的布局方法——Flex布局 当使用Flex布局,想实现如下图1的效果时,代码编写如下: 图1: <!-- wxml文件 --> ...
- java.lang.Thread类的静态方法sleep()和yield()的比较
[线程让步yield()方法] yield()方法可以让当前正在执行的线程暂停,但它不会阻塞该线程,它只是将该线程从运行状态转入就绪状态. 只是让当前的线程暂停一下,让系统的线程调度器重新调度一次. ...
- 刷题记录:[ASIS 2019]Unicorn shop
目录 刷题记录:[ASIS 2019]Unicorn shop 一.涉及知识点 1.Unicode安全问题 刷题记录:[ASIS 2019]Unicorn shop 题目复现链接:https://bu ...
- scrapy+splash 爬取京东动态商品
作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3159 splash是容器安装的,从docker官网上下载windows下的 ...
- 第06组 Alpha冲刺(4/4)
队名:福大帮 组长博客链接:https://www.cnblogs.com/mhq-mhq/p/11913386.html 作业博客 :https://edu.cnblogs.com/campus/f ...
- mysql 面试题 查询出表中某字段的重复值
users 表中有 两个字段 id 和 name 表数据大概如下: id name 1 AAA 2 BBB 3 CCC 4 AAA 请写查 ...
- Unity接入微信登录 微信分享 微信支付 支付宝SDK
你将会学到的unity集成SDK游戏中接入微信支付与支付宝支付游戏中接入微信登录与微信分享 目录 mp4格式,大小2.2GB 扫码时备注或说明中留下邮箱 付款后如未回复请至https://shop13 ...
- ListView中嵌入布局的Button或多个点击事件
有时候在ListView嵌入的布局中有多个事件需要点击,比如一个item中有TextView和Button两个布局,当我们需要获取这两个点击事件时,我们应该如何去获取呢,通常来说,我们都是已经固定好了 ...