zoukankan      html  css  js  c++  java
  • 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=)

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

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

    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

    mark

    1、最近邻插值

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

    变换后:

    mark

    2、双线性插值

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

    mark

    3、区域插值

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

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

    4、三次样条插值

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

    mark

    我是尾巴:

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

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

    最后推荐:

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

    typora

    markdownpad

    坚持把opencv做个完整笔记!

  • 相关阅读:
    gRPC .NET Core跨平台学习
    .NET Core性能测试组件BenchmarkDotNet 支持.NET Framework Mono
    ASP.NET Core中间件(Middleware)实现WCF SOAP服务端解析
    gRPC C#学习
    中标麒麟关闭防火墙
    linux安装python
    python matplotlib.pyplot保存jpg图片失败
    python正态分布
    数据健康管理总结
    python使用statsmodel
  • 原文地址:https://www.cnblogs.com/zhangkanghui/p/11241388.html
Copyright © 2011-2022 走看看