【OpenCV】P2 程序加载显示图片

目录

  • 四个步骤
    • 读取图像
    • 创建窗口
    • 显示图像
    • 释放内存
  • 完整代码

Opencv 中,如果想要加载展示一张图片,有以下几个步骤:

  1. 读取图像:根据指定路径读取图像,将图像转化为数字矩阵形式;
  2. 创建窗口:创建图像显示窗口,命名窗口名称;
  3. 显示图像:通过窗口以数字矩阵形式展示图像;
  4. 释放内存:展示完成,释放内存。

四个步骤

读取图像

OpenCV 提供函数 cv2.imread() 读取图像,该函数的一般形式如下:

image_arr = cv2.imread(filename, flags)
  • filename:要读取的图像文件路径;
  • flags:可选参数,用于指定如何读取图像:
    • cv2.IMREAD_COLOR:默认值,读取 RGB 三通道图像;
    • cv2.IMREAD_GRAYSCALE:读取图像,并调整为单通道灰度图像;
    • cv2.IMREAD_UNCHANGED:读取图像,保持原始所有通道信息;
    • 等等

读取图像后,将以数字矩阵的形式保存在内存中 image_arr 变量中。这个数字矩阵包含了图像的像素信息,可以进行各种图像处理和分析操作,比如后续博文会介绍到图像转换、滤波、边缘检测等。

e . g . c o d e . e.g.code. e.g.code. 读取一张图像以及其灰度图矩阵信息:

import cv2
image_arr_1 = cv2.imread("universe.jpg")
image_arr_2 = cv2.imread("universe.jpg", cv2.IMREAD_GRAYSCALE)
print("原图矩阵为:", image_arr_1)
print("灰度图矩阵为:", image_arr_2)

创建窗口

OpenCV 提供函数 cv2.namedWindow() 来创建一个展示窗口并赋予名称,该函数的一般形式如下:

cv2.namedWindow('WindowName', WindowSize)
  • WindowName:指定窗口名称;
  • WindowSize:可选参数,指定窗口大小:
    • WINDOW_AUTOSIZE: 默认值,窗口大小自适应内容;
    • WINDOW_NORMAL: 窗口正常显示,用户可以调整窗口大小;
    • WINDOW_KEEPRATIO: 保持图像的宽高比;
    • 等等

创建窗口后,我们将在显示图像时使用该窗口进行展示;

e . g . c o d e e.g.code e.g.code

# 创建一个名为 "MyWindow" 的窗口,用户可以调整窗口大小
cv2.namedWindow('MyWindow', cv2.WINDOW_NORMAL)

显示图像

OpenCV 提供的 imshow() 函数用来显示图像。该函数接受两个参数,第一个参数为窗口名称,第二个参数为要显示的图像数字矩阵。

到此,理论上我们已经可以打开一个名为 Image Of Universe 的窗口并展示我们的图像 universe.jpg,但是我们还缺少两行代码;

import cv2# 读取图像
image_arr = cv2.imread('universe.jpg', cv2.IMREAD_COLOR)
# 创建展示窗口
cv2.namedWindow("Image Of Universe", cv2.WINDOW_NORMAL)
# 展示图像
cv2.imshow('Image Of Universe', image_arr)
# 未完待续
# 缺少设定窗口展示时间
# 缺少释放内存资源代码

首先,缺少设定窗口展示时间。Opencv 规定,需要设定窗口展示的时间,否则将会一闪而过。设定函数为 waitKey,单位为毫秒;

cv2.waitKey(1000)	# 代表窗口展示时间为1s
cv2.waitKey(0)		# 窗口将一直展示

释放内存

最后,展示完成后,通过函数 destoryAllWindows() 释放内存;

cv2.destoryAllWindows()

完整代码

综上,完整代码如下:

import cv2image_arr = cv2.imread('universe.jpg', cv2.IMREAD_COLOR)
cv2.namedWindow("Image Of Universe", cv2.WINDOW_NORMAL)
cv2.imshow('Image Of Universe', image_arr)key = cv2.waitKey(0)
if key == ord('q'):print("退出展示窗口")cv2.destroyAllWindows()

定稿:2024/1/24
版本:第三版
如有任何问题,请留言或私信,感谢!

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

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

相关文章

vue2项目打包到测试环境之后报错require is not defined

配置打包命令npm run build:test到测试环境之后报错,打包到生产环境没有问题,查找了项目中的require引入似乎也没啥有问题的地方,所以排除是require的原因 环境变量文件: 打包指令: 解决办法: 将.env.tes…

【vue开发示例介绍】

vue开发示例介绍 1. 开发示例1.1 做一个自定义组件Welcome1.2 增加“用户管理”和“关于我们”组件1.3 嵌套路由 1. 开发示例 1.1 做一个自定义组件Welcome 1&#xff09; 在components下创建一个Welcome.vue自定义组件 <template><div class"hello">…

九、C++结构体(1)

一、结构体概念 结构体属于用户自定义的数据类型&#xff0c;允许用户存储不同的数据类型 二、结构体定义和使用 语法&#xff1a; struct 结构体名 {结构体成员列表}; 通过结构体创建变量的方式有三种&#xff1a; 1、struct 结构体名 变量名 2、struct 结构体名 变量名…

[docker] Docker 网络和Cgroup

一、Docker 网络 1.1 Docker 网络实现原理 Docker使用Linux桥接&#xff0c;在宿主机虚拟一个Docker容器网桥(docker0)&#xff0c;Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址&#xff0c;称为Container-IP&#xff0c;同时Docker网桥是每个容器的默认…

go语言模板处理包text/template详解

本文对go语言内置模板处理包"text/template"常用操作汇总进行了详解&#xff0c;非常全面&#xff0c;一次搞定你的问题&#xff01;还不收藏等啥呢&#xff01; 目录 通用结构体定义 通用转换 1&#xff0c;基础操作 2&#xff0c;解析文件 3&#xff0c;自定义…

【C/C++】C/C++编程——C++ 开发环境搭建

C的开发环境种类繁多&#xff0c;以下是一些常见的C 集成开发环境&#xff1a; AppCode &#xff1a;构建与JetBrains’ IntelliJ IDEA 平台上的用于Objective-C&#xff0c;C,C&#xff0c;Java和Java开发的集成开发环境CLion&#xff1a;来自JetBrains的跨平台的C/C的集成开…

《动手学深度学习(PyTorch版)》笔记2

Chapter2 Preliminaries 2.1 Automatic Differentiation 让计算机实现微分功能&#xff0c; 有以下四种方式&#xff1a; - 手工计算出微分&#xff0c; 然后编码进代码 - 数值微分 (numerical differentiation) - 符号微分 (symbolic differentiation) - 自动微分&#xff0…

java web mvc-03-JFinal

拓展阅读 Spring Web MVC-00-重学 mvc mvc-01-Model-View-Controller 概览 web mvc-03-JFinal web mvc-04-Apache Wicket web mvc-05-JSF JavaServer Faces web mvc-06-play framework intro web mvc-07-Vaadin web mvc-08-Grails JFinal JFinal 是基于 Java 语言的极…

go语言基本类型

Golang 更明确的数字类型命名&#xff0c;支持 Unicode&#xff0c;支持常用数据结构。 类型长度(字节)默认值说明bool1falsebyte10uint8rune40Unicode Code Point, int32int, uint4或8032 或 64 位int8, uint810-128 ~ 127, 0 ~ 255&#xff0c;byte是uint8 的别名int16, uin…

Prompt Engineering

目录 什么是提示工程 什么是提示工程 在当今人工智能领域&#xff0c;提问大型语言模型&#xff08;Large Language Models&#xff0c;LLM&#xff09;已经成为一种常见的实践&#xff0c;但如何向这些模型提出问题&#xff0c;或者更准确地说&#xff0c;如何引导它们产生期…

Shell脚本③条件语句、if命令和case命令

目录 一.条件语句 1.test测试条件表达式 2.整数数值比较 &#xff08;1&#xff09;比较两个整数大小 &#xff08;2&#xff09;查看系统剩余内存是否低于1024M 3.逻辑测试 4.三元运算符 二.if命令 1.单分支结构 2.双分支结构 3.多分支结构 三.case语句 四.脚本 …

代码随想录算法训练营第十三天|层序遍历10,226.翻转二叉树,101.对称二叉树

系列文章目录 代码随想录算法训练营第一天|数组理论基础&#xff0c;704. 二分查找&#xff0c;27. 移除元素 代码随想录算法训练营第二天|977.有序数组的平方 &#xff0c;209.长度最小的子数组 &#xff0c;59.螺旋矩阵II 代码随想录算法训练营第三天|链表理论基础&#xff…

项目成本估算基准的常见步骤

项目成本估算基准是指在项目启动阶段确定的用于衡量和控制项目成本的基准。 基准成本是项目成本估算的依据&#xff0c;也是后续成本控制和决策的依据。它为管理层提供项目预算投资方案等关键投资依据&#xff0c;决定资源的分配情况&#xff0c;有助于优化资源使用效率&#x…

【Linux】文件周边001之系统文件IO

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.C语言文件IO 1.1…

2024 V加爆好友的4个方法

2024加好友&#x1f449;加爆V信的4个方法

SUSE Linux 15 SP5 安装图解

风险告知 本人及本篇博文不为任何人及任何行为的任何风险承担责任&#xff0c;图解仅供参考&#xff0c;请悉知&#xff01;本次安装图解是在一个全新的演示环境下进行的&#xff0c;演示环境中没有任何有价值的数据&#xff0c;但这并不代表摆在你面前的环境也是如此。生产环境…

如何自己制作一个属于自己的小程序?

在这个数字化时代&#xff0c;小程序已经成为了我们生活中不可或缺的一部分。它们方便快捷&#xff0c;无需下载安装&#xff0c;扫一扫就能使用。如果你想拥有一个属于自己的小程序&#xff0c;不论是为了个人兴趣&#xff0c;还是商业用途&#xff0c;都可以通过编程或者使用…

epoll_socket

背景 通常来说&#xff0c;实现处理tcp请求&#xff0c;为一个连接一个线程&#xff0c;在高并发的场景&#xff0c;这种多线程模型与Epoll相比就显得相形见绌了。epoll是linux2.6内核的一个新的系统调用&#xff0c;epoll在设计之初&#xff0c;就是为了替代select, poll线性复…

Vue3中的自定义Hooks

为什么要使用Hooks&#xff1f; 组件复用性更强&#xff1a;通过Hooks可以使得组件的一些逻辑可以更好地进行封装和复用 更好的逻辑分离。Hooks有助于组件内的业务逻辑更加清晰明了&#xff0c;从而减少代码耦合度。 更高的代码可读性。使用Hooks使得函数组件的可读性更高&am…

【论文阅读|2024 WACV 多目标跟踪Deep-EloU】

论文阅读|2024 WACV 多目标跟踪Deep-EloU 摘要1 引言&#xff08;Introduction&#xff09;2 相关工作&#xff08;Related Work&#xff09;2.1 基于卡尔曼滤波器的多目标跟踪算法&#xff08;Multi-Object Tracking using Kalman Filter&#xff09;2.2 基于定位的多目标跟踪…