【OpenCV】OpenCV 4.9.0 正式发布

开源计算机视觉库 OpenCV 4.9.0 已于2023年12月29日正式发布。

此次发布有DNN模块对ONNX Attention、Einsum等层的支持、新的fastGEMM实现、transformers的实验性支持等诸多亮点。
在这里插入图片描述


OpenCV 4.9.0 更新内容:

(来自OpenCV中国团队以及中国社区的贡献以🍄标出)

DNN模块:

  • 实验性transformers支持 🍄

  • #24476 ONNX Attention层支持 🍄

  • #24037 ONNX Einsum层支持

  • #23987 OpenVINO后端对INT8模型的支持

  • #24092 ONNX Gather Elements层支持

  • #24378 ONNX InstanceNorm layer层支持 🍄

  • #24295 用cv::broadcast对ONNX Expand层重构 🍄

  • #24463 #24577 #24483 改进DNN图融合

  • #23897 #24694 #24509 新的fastGEMM实现 🍄

  • #23654 ARM上Winograd fp16的优化 🍄

  • Yolo系列模型支持的测试和bug修复 🍄

  • CUDA后端新的层的支持和bug修复: GEMM, Gelu, Add 🍄

  • #24462 CANN后端: bug修复, HardSwish, LayerNormalization和InstanceNormalization的支持 🍄

  • #24552 OpenVINO, OpenCL和CUDA后端LayerNormalization的支持 🍄

Core模块:

  • #23965 增加cv::broadcast 🍄

Objdetect模块:

  • #24364 修复QR码编码器版本估计的bug

  • #24355 使用动态窗口的更准确的ArUco标记角点细化

  • #24479 ArUco中过滤轮廓的bug修复

  • #24598 Android的QR码检测示例

  • ArUco标记, Charuco板及QR码的bug修复和文档更新

Video:

  • #24201 LIU Pengyu贡献了基于vision transformer的VitTrack模型的目标跟踪API TrackerVit 🍄

Calibration模块:

  • 棋盘格标定中的多个修复和改进

  • #23025 修复标定中stdDev的计算问题

  • #24482 修复findEssentialMat使用USAC时的bug

  • #24527 修复cv::cornerSubPix中超出图像的访问

  • #23607 Fixed ap3p中的崩溃

  • #24035 修复stereoRectify图像边界

  • #24211 修复essential_solver.cpp中的"use after free"问题

Python Bindings:

  • 对丢失的类型和手动封装的类型添加了类型存根生成

  • #24026 Numpy数组添加只读标志处理

  • #24028 修复了模块内的异常处理和绑定

  • #23958 改进了Numpy数组类型处理中的错误消息

  • #24468 修复了 Python 中的构造函数文档

Android:

  • 在Maven Central发布新的Android Archive Package (AAR)

  • 新的Android示例: QR码检测,视频IO;更新DNN和Face Detector示例

  • 改用Gradle 7.6.3

平台支持:

  • #23021 CMake中增加CUDA作为第一语言的支持,目前使用的是已经弃用的(自 CMake 3.10 起)FindCUDA 模块。

其他:

  • HAN Liutong实现OpenCV的CPU优化代码兼容可变向量长度的SIMD (RISC-V RVV) 🍄

OpenCV Model Zoo:

自OpenCV 4.9.0起,OpenCV Model Zoo (https://github.com/opencv/opencv_zoo) 将与opencv同步发布。

在这里插入图片描述


OpenCV 4.9 下载地址:

  • Documentation

  • Sources


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1157174922a44cf198beb7468cfed4da.png#pic_center)

OpenCV中国团队是OpenCV在中国的开发团队,非营利目的,致力于OpenCV的开发、维护和推广工作。


**本书京东优惠购书链接:https://item.jd.com/14098452.html**

在这里插入图片描述


1.1 图像的读取与保存

1.1.1 图像的读取

函数cv.imread用于从指定文件加载图像并返回该图像的矩阵。

函数原型
cv.imread(filename[, flags=IMREAD_COLOR]) → retval

参数说明

  • filename:读取图像的文件路径和文件名,包括文件扩展名。
  • flags:读取方式的参数,可选项如下。
    • IMREAD_COLOR:始终将图像转换为三通道BGR格式的彩色图像,是默认方式。
    • IMREAD_GRAYSCALE:始终将图像转换为单通道灰度图像。
    • IMREAD_UNCHANGED:按原样返回加载的图像(使用Alpha通道)。
    • IMREAD_ANYDEPTH:输入具有相应深度时会返回16位或32位图像,否则会转换为8位图像。
    • IMREAD_ANYCOLOR:以任何可能的颜色格式读取图像。
  • retval:返回值,读取的OpenCV图像为多维Numpy数组。

注意问题
(1) 在OpenCV中,最常用的图像数据结构是C++语言定义的Mat类。在Python语言中,Mat类的对象创建和操作是通过Numpy数组实现的。OpenCV对图像的任何操作,本质上都是对 Numpy数组的运算。
(2) OpenCV读取图像文件,返回值是二维或三维Numpy数组。当读取灰度图像时,返回值是形为(h,w)的二维数组;当读取彩色图像时,返回值是形为(h,w,ch)的三维数组。
(3) 如果无法读取图像(如文件不存在、权限不正确、格式不被支持或无效),并不会有报错提示,而会返回一个空矩阵。
(4) 该函数不支持带有中文或空格的文件路径和文件名,但也不会出现报错提示。当必须使用中文路径或文件名时,可以使用函数cv.imdecode 处理,具体参见【例程0103】。
(5) 在OpenCV中,使用的彩色图像为BGR格式的图像,读取图像文件后,图像文件可按B/G/R的顺序存储为多维数组。PIL、PyQt、Matplotlib 等库使用的是RGB格式的图像,图像文件按R/G/B的顺序存储。
(6) 该函数默认忽略图像的透明通道(Alpha通道),通过设置参数flags=IMAGE_
UNCHANGED可以读取透明通道。
(7) 对于彩色图像文件,该函数默认按彩色图像格式读取,也可以通过设置flags=0读取为灰度图像格式。将彩色图像格式读取为灰度图像格式,本质上是读取的彩色图像,并将彩色图像转换为灰度图像。
(8) 目前支持的文件及扩展名如下。
◎ Windows 位图:.bmp、.dib。
◎ JPEG 文件:.jpeg、.jpg、.jpe。
◎ JPEG 2000文件:.jp2。
◎ 便携式网络图形:.png。
◎ WebP:.webp。
◎ 便携式图像:.pbm、.pgm、.ppm、.pxm、.pnm。
◎ TIFF 文件:.tiff、.tif。


1.1.2 图像的保存

函数cv.imwrite可以基于扩展名的格式将图像保存到指定文件。
函数原型
cv.imwrite(filename, img[,params]) → retval

参数说明

  • filename:保存图像的文件路径和文件名,包括文件扩展名。
  • img:要保存的 OpenCV 图像,格式为多维Numpy数组。
  • params:编码格式参数,可选项如下。
    • IMWRITE_JPEG_QUALITY:设置JPEG/JPG格式图片的质量。数值越大,图片质量越高,取值范围为0~100,默认值为95。
    • IMWRITE_PNG_COMPRESSION:设置PNG 格式图片的压缩比。数值越大,压缩比越大,取值范围为0~9,默认值为3。
    • IMWRITE_TIFF_RESUNIT:设置TIF 格式图片的分辨率。
    • IMWRITE_WEBP_QUALITY:设置WEBP 格式图片的质量。数值越大,图片质量越高,取值范围为1~100,默认值为100。
    • IMWRITE_JPEG2000_COMPRESSION_X1000:设置JPEG2000格式图片的质量,默认值为1000。
  • retval:返回值,是布尔值,保存成功标志。

    注意问题
    (1) 图像通常保存为8位单通道图像或BGR三通道彩色图像,而BGRA四通道图像可以使用Alpha通道保存为PNG图像,更多设置详见OpenCV说明文档(链接1-1)。
    (2) 函数cv.imwrite将OpenCV图像(多维Numpy数组)保存为图像文件,图像的保存格式由filename的扩展名决定,与读取图像文件时的图像格式无关。
    (3) 函数cv.imwrite不支持带有中文或空格的文件路径和文件名,但也不会有报错提示。需要使用中文路径或文件名时,可以使用函数cv.imdecode 处理,参见【例程0103】。

【例程0101】用OpenCV读取和保存图像文件

本例程用OpenCV读取和保存图像文件,注意读取图像文件时的参数设置。

# 【0101】用OpenCV 读取和保存图像文件
import cv2 as cvif __name__ == '__main__':# 读取图像文件,支持 BMP、JPG、PNG、TIFF 等常用格式filepath = "../images/Lena.tif"  # 读取图像文件的路径img = cv.imread(filepath, flags=1)  # flags=1 读取彩色图像文件(BGR)gray = cv.imread(filepath, flags=0)  # flags=0 读取为灰度图像saveFile = "../images/imgSave1.png"  # 保存图像文件的路径cv.imwrite(saveFile, img, [int(cv.IMWRITE_PNG_COMPRESSION), 8])cv.imwrite("../images/imgSave2.png", gray)

程序说明
(1) 本例程读取的图像文件是彩色图像文件。读取为彩色图像时可以设置flags=1,也可以省略;读取为灰度图像时必须设置flags=0。
(2) 读取和保存图像文件可以使用相对路径或绝对路径。
(3) 读取文件时要注意检查指定路径的图像文件是否存在。


【例程0102】从网络地址读取图像文件

本例程使用函数cv.imdecode从指定的内存缓存中读取数据,并将数据转换为图像格式,用于从网络传输数据中恢复图像。

# 【0102】从网络地址读取图像文件
import cv2 as cv
import numpy as npif __name__ == '__main__':import urllib.request as requestresponse = request.urlopen\("https://profile.csdnimg.cn/8/E/F/0_youcans")  # 指定的 url 地址imgUrl = cv.imdecode(np.array(bytearray(response.read()), dtype=np.uint8), -1)cv.imshow("imgUrl", imgUrl)  # 在窗口显示图像key = cv.waitKey(5000)  # 5000 毫秒后自动关闭cv.destroyAllWindows()

程序说明
(1) 从网络地址读取图像文件不能使用函数cv.imread,而要使用函数cv.imdecode。
(2) 函数cv.imdecode能将图像编码为流数据,赋值到内存缓存中,以方便网络传输。


【例程0103】读取和保存文件路径中带有中文字符的图像

本例程用于读取/保存文件路径中带有中文字符的图像。

# 【0103】读取和保存文件路径中带有中文字符的图像
import cv2 as cv
import numpy as npif __name__ == '__main__':filepath = "../images/测试图01.tif"  # 带有中文的文件路径和文件名# img1 = cv.imread(filepath, flags=1)  # 中文路径读取失败,但不会报错img2 = cv.imdecode(np.fromfile(filepath, dtype=np.uint8), flags=-1)saveFile = "../images/测试图02.tif"  # 带有中文的保存文件路径# cv.imwrite(saveFile, img2)  # 中文路径保存失败,但不会报错cv.imencode(".jpg", img2)[1].tofile(saveFile)

程序说明
如果读取/保存图像的路径和文件名中含有中文字符,则不能用函数cv.imread/cv.imwrite操作,可以使用函数cv.imdecode/cv.imencode处理。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/227750.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java多线程<三>常见的多线程设计模式

多线程的设计模式 两阶段线程终止 park方法 interrupted() 会让他失效。 使用volatile关键字进行改写 单例模式 双锁检测 保护性暂停 实现1: package threadBase.model;/*** author: Zekun Fu* date: 2022/5/29 19:01* Description:* 保护性暂停,* …

主流级显卡的新选择,Sparkle(撼与科技)Intel Arc A750兽人体验分享

▼前言 对于玩家而言,英特尔独显的出现不仅打破了NVIDIA与AMD双雄天下的局面,而且旗下的Arc A系列显卡还拥有不俗的做工性能以及颇具优势的价格,无论是升级或者是装新机都非常合适。如果要在Arc A系列当中选一个性能不俗,能够满足…

2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题)

2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题) 2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题) 第一部分:数据安全防护(30%) 第二部分:数据安全管理(30%) 第三部分:数据安全处置(40%) 项目介绍…

pytorch01:概念、张量操作、线性回归与逻辑回归

目录 一、pytorch介绍1.1pytorch简介1.2发展历史1.3pytorch优点 二、张量简介与创建2.1什么是张量?2.2Tensor与Variable2.3张量的创建2.3.1 直接创建torch.tensor()2.3.2 从numpy创建tensor 2.4根据数值创建2.4.1 torch.zeros()2.4.2 torch.zeros_like()2.4.3 torch…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的固定帧率(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的固定帧率(C) Baumer工业相机Baumer工业相机的固定帧率功能的技术背景CameraExplorer如何查看相机固定帧率功能在NEOAPI SDK里通过函数设置相机固定帧率 Baumer工业相机通过NEOAPI SDK设置相机固定…

计算机毕业设计 基于HTML5+CSS3的在线英语阅读分级平台的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

深度学习 | 编码器-解码器网络、seq2seq模型、束搜索算法

我们知道传统RNN输入和输出数据是等长的,这显然极大限制了他的应用范围。 前面几节我们讲到的循环神经网络的各种变体基本上都在解决一个序列的问题。还有一大类问题涉及到的是两个序列间转换。它是自然语言处理中的一个重要领域,包括机器翻译、语音识别…

【GOLANG】使用插件 Goanno 的方式来对方法、接口、结构体注释模板配置

直接 使用插件 Goanno 的方式来对方法、接口、结构体注释模板配置 1、简单安装 Goanno 插件 File->Settings->Plugins , 搜索 Goanno Normal Method 配置内容如下: // Title ${function_name} // Description ${todo} // Author mumu ${date} ${time} // Par…

速卖通详情API接口技术贴:解锁全球商品信息,引领电商创新潮流

一、概述 速卖通详情API接口是一种应用程序接口,允许开发者访问速卖通平台的商品详情数据。通过使用该API接口,开发者可以获取商品的基本信息、描述、图片等,并将其集成到自己的应用程序或网站中,为用户提供更全面的商品信息。 …

进阶学习——Linux系统服务器硬件认识与RAID磁盘

目录 一、服务器知识补充 1.硬件 2.服务器常见故障 二、认识RAID 1.什么是RAID 2.RAID的优点 3.RAID的实现方式 三、RAID磁盘陈列 1.RAID 0 磁盘陈列介绍——RAID 0 2.RAID 1 磁盘陈列介绍——RAID 1 3.RAID 5 磁盘陈列介绍——RAID 5 4.RAID 6 磁盘陈列介绍——RA…

解决阿里云远程连接yum无法安装问题(Ubuntu 22.04)

解决阿里云远程连接yum无法安装问题(Ubuntu 22.04) 第一步 进入阿里云远程连接后,尝试安装宝塔面包第二步:尝试更新软件包等一些列操作第三步:完成上述操作之后,尝试安装yum第四步:尝试更换清华…

代数结构与图论

文章目录 图的基本概念欧拉图与哈密顿图树平面图代数系统群与环格与布尔代数 图的基本概念 图的阶:图中的顶点数 ,n 个顶点被称为 n 阶图零图:一条边都没有 平凡图:一阶零图基图:将有向图的各条有向边改成无向边所得到…

java springboot将接口查询数据放在系统中 一小时系统更新一次 避免用户访问接口查询数据库缓慢

真到了公司 很多数据库表 特别是常用的功能业务对应的 都是几百万条起步的数据 查询会比较缓慢 那么 我们就可以不用每次都真的查询数据库 例如 我这里有一个接口 通过 封装的 IBookService.list 函数去查询数据库 接口返回是这样的 我们先在启动类 条件装配上 这个接口所在的…

阿里云30个公共云地域、89个可用区、5个金融云和政务云地域

阿里云基础设施目前已面向全球四大洲,公共云地域开服运营30个公共云地域、89个可用区,此外还拥有5个金融云、政务云地域,并且致力于持续的新地域规划和建设,从而更好的满足用户多样化的业务和场景需求。伴随着基础设施的加速投入和…

【Java开发岗面试】八股文—Java基础集合多线程

声明: 背景:本人为24届双非硕校招生,已经完整经历了一次秋招,拿到了三个offer。本专题旨在分享自己的一些Java开发岗面试经验(主要是校招),包括我自己总结的八股文、算法、项目介绍、HR面和面试…

pytorch05:卷积、池化、激活

目录 一、卷积1.1 卷积的概念1.2 卷积可视化1.3 卷积的维度1.4 nn.Conv2d1.4.1 无padding 无stride卷积1.4.2 无padding stride2卷积1.4.3 padding2的卷积1.4.4 空洞卷积1.4.5 分组卷积 1.5 卷积输出尺寸计算1.6 卷积的维度1.7 转置卷积1.7.1 为什么被称为转置卷积1.7.2 nn.Con…

Grafana增加仪表盘

1.Grafana介绍 grafana 是一款采用Go语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。 Grafana下载地址:https://grafana.com/g…

Python+OpenGL绘制3D模型(六)材质文件载入和贴图映射

系列文章 一、逆向工程 Sketchup 逆向工程(一)破解.skp文件数据结构 Sketchup 逆向工程(二)分析三维模型数据结构 Sketchup 逆向工程(三)软件逆向工程从何处入手 Sketchup 逆向工程(四&#xf…

Java强软弱虚引用

面试: 1.强引用,软引用,弱引用,虚引用分别是什么? 2.软引用和弱引用适用的场景? 3.你知道弱引用的话,能谈谈WeakHashMap吗? 目录 一、Java引用 1、强引用(默认支持模式…

05-C++ 类和对象-继承

类与对象-03 继承与派生 1. 继承的概念 c最重要的特征是代码重用,通过继承机制可以利用已有的数据类型,来定义新的数据类型,新的类不仅拥有旧类的成员,还拥有新定义的成员。 一个 B 类继承于 A 类,或称从类 A 派生…