【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.mzph.cn/news/587041.shtml

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

相关文章

antv/x6_2.0学习使用(二、画布)

画布 一. 创建容器 在页面中创建一个 div 标签&#xff0c;用来容纳画布 <div id"container"></div>画布常用配置信息 const graph new Graph({container: graphRef.value, // 画布容器width: 800, // 画布宽度&#xff0c;默认使用容器宽度height:…

2017年喜茶数字营销变化

1. 什么是数字营销&#xff1f;数字化时代&#xff0c;消费者行为模式发生了哪些变化&#xff1f; 数字营销是指使用数字渠道和平台&#xff0c;通过在线手段推广产品或服务&#xff0c;与目标受众进行互动和沟通的一种营销方式。它涵盖了多种在线渠道&#xff0c;包括社交媒…

华为云云耀云服务器L实例评测|Python Selenium加Chrome Driver构建UI自动化测试实践

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;AWS/阿里云资深使用…

HackTheBox - Medium - Linux - Bagel

Bagel 今天我开始了《Red Team Development and Operations A Practical Guide》的学习&#xff0c;保持学习&#xff0c;后面差不多到时机后就学CRTOⅡ Bagel 是一款中等难度的 Linux 机器&#xff0c;其特点是电子商店容易受到路径遍历攻击&#xff0c;通过该攻击可以获取应…

使用vmware,在ubuntu18.04中使用笔记本的摄像头

步骤1&#xff1a;在windows中检查相机状态 win10系统中&#xff0c;在左下的搜索栏&#xff0c;搜索“相机”&#xff0c;点击进入即可打开相机&#xff0c;并正常显示图像。 注意&#xff1a;如果相机连接到了虚拟机&#xff0c;则不能显示正常。 步骤2&#xff1a;在ubuntu…

STM32——通用计时器

通用计时器框图 1.时钟源 1&#xff09;内部时钟(CK_INT) 2&#xff09;外部时钟模式 1&#xff1a;外部输入引脚(TIx)&#xff0c;x1&#xff0c;2&#xff08;即只能来自于通道 1 或者通道 2&#xff09; 3&#xff09;外部时钟模式 2&#xff1a;外部触发输入(ETR) 4&#…

ARCGIS PRO SDK 访问Geometry对象

一、Geometry常用对象 二、主要类 1、ReadOnlyPartCollection&#xff1a;Polyline 和 Polygon 使用的 ReadOnlySegmentCollection 部件的只读集合&#xff0c;属性成员&#xff1a;​ 名字描述Count获取 ICollection 中包含的元素数。TIEM获取位于指定索引处的元素。Spatial…

mac中excel条件格式找到每一列的最大值并标红

假设现在excel有A1:R24组数据&#xff0c;最终效果如下 先选择要处理数据的第一列&#xff0c;然后点击【条件格式】-【新建规则】 style选择【classic】以及【Use a formula to determine which cells to format】&#xff0c;输入规则【C3MAX(C$3:C$24)】 注意这里C$3前面没…

Rust开发⼲货集(1)--迭代器与消费器

本内容是对 Rust开发干货集[1] 的实践与扩展. iter() 不转移所有权 先简单解释下什么叫"转移所有权": 在 Rust 中&#xff0c;"转移所有权"&#xff08;Ownership Transfer&#xff09;是一种核心概念&#xff0c;它涉及变量和数据的所有权从一个实体转移…

3D视觉-结构光测量-线结构光测量

概述 线结构光测量中&#xff0c;由激光器射出的激光光束透过柱面透镜扩束&#xff0c;再经过准直&#xff0c;产生一束片状光。这片光束像刀刃一样横切在待测物体表面&#xff0c;因此线结构光法又被成为光切法。线结构光测量常采用二维面阵 CCD 作为接受器件&#xff0c;因此…

QT上位机开发(乘法计算小软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面一篇文章&#xff0c;我们学习了怎么创建qt的第一个工程&#xff0c;怎么用designer给qt修改界面。虽然我们到目前为止&#xff0c;还没有编写…

C#使用switch语句更改窗体颜色

目录 一、示例 二、生成 用switch多路选择语句及窗体的BackColor属性更改窗体的BackColor属性。该属性用于获取或设置控件的背景颜色。 可以使用Color结构的静态属性获取Color对象&#xff0c;如Color.Red&#xff1b;也可以使用Color结构的静态方法Color.FromArgb()&#xf…

Linux权限的基本理解

一:&#x1f6a9;Linux中的用户 1.1&#x1f966;用户的分类 &#x1f31f;在Linux中用户可以被分为两种用户: 超级用户(root):可以在Linux系统中做各种事情而不被约束普通用户:只能做有限的事情被权限约束 在实际操作时超级用户的命令提示符为#,普通用户的命令提示符为$,可…

python观察图像的直流分量——冈萨雷斯数字图像处理

原理 在数字图像处理中&#xff0c;图像的直流分量&#xff08;DC分量&#xff09;是指图像中的平均亮度水平。这个概念源自于傅里叶变换&#xff0c;其中信号可以分解为多个频率成分。在这个上下文中&#xff0c;直流分量对应于频率为零的成分&#xff0c;即信号的平均值。 在…

CSS一个纯样式花里胡哨的动态渐变背景块

使用SASS或CSS纯样式花里胡哨的动态渐变背景块 鼠标放在小方块上会放大并挤压周围方块&#xff0c;背景颜色会动态改变。 效果如下 HTML结构 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"vie…

基于JWT的用户token验证

1. 基于session的用户验证 2. 基于token的用户身份验证 3. jwt jwt代码实现方式 1. 导包 <dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.18.2</version> </dependency> 2. 在登录…

Spring Data Redis对象缓存序列化问题

相信在项目中&#xff0c;你一定是经常使用 Redis &#xff0c;那么&#xff0c;你是怎么使用的呢&#xff1f;在使用时&#xff0c;有没有遇到同我一样&#xff0c;对象缓存序列化问题的呢&#xff1f;那么&#xff0c;你又是如何解决的呢&#xff1f; Redis 使用示例 添加依…

C++/CLI——1简介

C/CLI——1简介 如果你是.net程序员&#xff0c;不免会用到C/C写的库。对于简单的调用&#xff0c;可以直接使用DllImport来完成就可以&#xff0c;详情可参考C#调用C/C从零深入讲解。但是对于复杂的C类和对象&#xff0c;尤其是类似于OCC的大型C项目&#xff0c;DllImport可能…

初识大数据,一文掌握大数据必备知识文集(6)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

三子棋(c语言)

前言&#xff1a; 三子棋是一种民间传统游戏&#xff0c;又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏规则是双方对战&#xff0c;双方依次在9宫格棋盘上摆放棋子&#xff0c;率先将自己的三个棋子走成一条线就视为胜利。但因棋盘太小&#xff0c;三子棋在很多时候会出现和…