当前位置: 首页 > news >正文

计算机视觉 ---图像读取与显示(OpenCV与Matplotlib)

前言

        本文分别介绍了使用 OpenCV 和 Matplotlib 进行图像读取与显示的方法,如 cv2.imread ()、cv2.imshow ()、plt.imread ()、plt.imshow () 等,并提及了使用 OpenCV 时的注意事项。

OpenCV与Matplotlib图像读取与显示的差异

 图像读取:

  • OpenCV:使用cv2.imread()函数读取图像,默认读取的图像格式是BGR(蓝绿红)。
  • Matplotlib:使用plt.imread()函数读取图像,默认读取的图像格式是RGB(红绿蓝)。

图像显示:

  • OpenCV:使用cv2.imshow()函数显示图像,窗口会自动调整大小以适应图像。
  • Matplotlib:使用plt.imshow()函数显示图像,可以通过设置figsize参数来调整图像的大小。

        由于OpenCV默认读取的图像格式是BGR,因此如果想要使用matplotlib来正常显示原来的图片需要对图片的格式进行转换(因为matplotlib默认为RGB格式),使用cv2.cvtColor()函数将其转换为RGB格式,这部分的差异在下文会再次提到并且进行对比。

1、使用OpenCV对图像进行读取与显示

cv2.imread():

        cv2.imread()是 OpenCV 库中用于读取图像文件的函数。它可以将多种格式的图像文件(如 JPEG、PNG、BMP 等)读取到内存中,以numpy.ndarray(多维数组)的形式存储图像数据,方便后续的图像处理操作。基本语法为:

cv2.imread(filename, flags = cv2.IMREAD_COLOR)
  • filename:这是一个必需的参数,是一个字符串,表示要读取的图像文件的路径。这个路径可以是绝对路径,例如C:/Users/Username/Pictures/image.jpg,也可以是相对路径,例如./data/image.png,其中./表示当前目录。
  • flags:这是一个可选参数,用于指定读取图像的方式。它有多种取值,常见的有:
    • cv2.IMREAD_COLOR(默认值):以彩色模式读取图像。在这种模式下,对于彩色图像,它会忽略图像的透明度通道(如果有的话),将图像读取为 BGR(蓝 - 绿 - 红)格式的彩色图像。例如,一张 RGB 格式的图像,使用这个模式读取后会转换为 BGR 格式,存储在numpy.ndarray中。
    • cv2.IMREAD_GRAYSCALE:以灰度模式读取图像。无论原始图像是彩色还是灰度,读取后的图像都将是单通道的灰度图像,每个像素点的值表示该点的灰度强度,范围一般是 0 - 255。
    • cv2.IMREAD_UNCHANGED:按原始图像的格式读取,包括图像的颜色模式和透明度通道(如果有的话)。如果原始图像是彩色且有透明度通道(如 PNG 图像),读取后的numpy.ndarray会有相应的通道来存储透明度信息。

cv2.imshow():

         cv2.imshow()是 OpenCV库中的一个函数,用于在窗口中显示图像。函数的基本语法如下:

cv2.imshow(window_name, image)
  • window_name:这是一个字符串,表示要显示图像的窗口的名称。这个名称是自定义的,例如可以设置为 "My Image"、 "Display Window"等。
  • image:这是要显示的图像数据。通常是通过cv2.imread()函数读取的图像文件(例如.jpg.png等格式),其数据类型一般numpy.ndarray。

注意事项

  • 窗口大小:cv2.imshow()函数本身不会自动调整窗口大小以适应图像的尺寸。窗口大小通常会根据图像的尺寸和显示器的分辨率等因素来确定。如果图像很大,可能会超出屏幕显示范围;如果图像很小,窗口可能会比较大而图像只占其中一部分。
  • 图像格式支持:cv2.imshow()支持多种图像格式,如常见的 BGR(Blue - Green - Red)格式。如果图像是其他格式(如 RGB),可能需要进行格式转换才能正确显示。对于彩色图像,OpenCV 默认采用 BGR 格式存储和处理图像。例如,当使用cv2.imshow()读取一张彩色图像时,得到的图像数据是 BGR 格式的。因此,如果使用cv2.imshow()显示一张RGB格式图片时,会与原图出现差异,具体差异下方有示例。

        具体的操作见下面的代码,代码中有较为详细的注释。

# 导入模块
import cv2
from matplotlib import pyplot as pltimage_bgr = cv2.imread("./luffy.jpeg", flags=-1) #读取图像
image_rgb = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2RGB) # 转换为RGB格式# 创建一个窗口并显示BGR图像
cv2.imshow('BGR Image', image_bgr)# 创建一个窗口并显示RGB图像
cv2.imshow('RGB Image', image_rgb)# 等待键盘输入并关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

使用cv2.imshow()图像的显示结果如下(第一张为RGB显示图像,第二张为BGR显示图像):

 

大家可以自行对比一下。

2、使用Matplotlib对图像进行读取与显示

以下将Matplotlib简称为plt

plt.imread():

  plt.imread()属于matplotlib库。它主要的功能是读取图像文件,将图像数据加载到内存中,以便后续使用matplotlib库进行图像的展示、处理等操作。基本语法为:

image_array = plt.imread(fname, format=None)
  • fname:这是一个必需的参数,是一个字符串,表示要读取的图像文件的路径。和cv2.imread中的文件名参数类似,它可以是绝对路径或者相对路径。例如,绝对路径/home/user/images/picture.jpg或者相对路径../data/image.png..表示上级目录)。
  • format:这是一个可选参数,用于指定图像的格式。如果不指定,matplotlib会根据文件扩展名自动尝试识别图像格式。它可以是如'jpg''png''gif'等常见的图像格式名称。不过在实际应用中,一般很少手动指定这个参数,因为matplotlib的自动识别功能已经很强大。
与 cv2.imread 的比较
  • 格式差异:如前面提到的,plt.imread读取的彩色图像通常是 RGB 格式,而cv2.imread默认读取的彩色图像是 BGR 格式。这在将图像数据用于不同的图像处理算法或者库时需要注意,如果要在两个库之间传递彩色图像数据,可能需要进行格式转换。
  • 功能侧重点差异cv2.imread主要用于为 OpenCV 库中的图像处理操作提供图像数据,OpenCV 侧重于计算机视觉相关的功能,如目标检测、图像滤波等。而plt.imread主要是为matplotlib库中的图像展示和简单的图形处理提供数据,matplotlib更侧重于数据可视化和简单的绘图操作。

plt.imshow():

        plt.imshow()是matplotlib库中的一个函数,主要用于显示图像。它可以将各种类型的图像数据(如二维数组表示的灰度图像、三维数组表示的彩色图像等)以可视化的方式展示在图形界面或者输出设备(如 Jupyter Notebook 等)上。基本语法为:

plt.imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, filternorm=1, filterrad=4.0, imlim=None, resample=None, url=None, data=None, **kwargs)

在常见的使用场景中,只需要使用前面几个参数

  • X:这是必需的参数,代表要显示的图像数据,通常是numpy.ndarray类型。对于灰度图像,是一个二维数组;对于彩色图像,是一个三维数组(例如 RGB 图像的形状通常是 (height, width, 3))。
  • camp:这是一个可选参数,用于指定颜色映射(colormap)。颜色映射决定了如何将图像中的数值转换为实际显示的颜色。例如,对于灰度图像,默认的颜色映射是'gray',它会将像素值从黑到白进行映射。对于一些特殊的数据可视化,如热度图,可以使用'hot'颜色映射来显示数据的热度分布等。
  • aspect:这个参数用于控制图像的纵横比。例如,aspect='auto'会自动调整图像的纵横比,使图像能够完整地显示在给定的绘图区域内;aspect='equal'则会保持图像的原始纵横比。

示例代码:

# 导入模块
from matplotlib import pyplot as plt# 读取图像
image_rgb = plt.imread("./luffy.jpeg")print(image_rgb.shape) # 高度,宽度,通道数
print(image_rgb.size) # 高度 x 宽度 x 通道数
print(image_rgb.dtype) # 数据类型plt.imshow(image_rgb)
plt.show()

 图像结果如下:

Over !!散会!

相关文章:

计算机视觉 ---图像读取与显示(OpenCV与Matplotlib)

前言 本文分别介绍了使用 OpenCV 和 Matplotlib 进行图像读取与显示的方法,如 cv2.imread ()、cv2.imshow ()、plt.imread ()、plt.imshow () 等,并提及了使用 OpenCV 时的注意事项。 OpenCV与Matplotlib图像读取与显示的差异 图像读取: Op…...

XML Schema 字符串数据类型

XML Schema 字符串数据类型 1. 概述 XML Schema 是一种用于定义 XML 文档结构和内容的语言。它提供了一种强大的机制来描述 XML 数据的类型、结构和约束。在 XML Schema 中,字符串数据类型是一种基本数据类型,用于表示文本数据。 2. 字符串数据类型 …...

Spring Boot 读取 yml 并映射至实体

application-base.yml app:# 附件存储路径upload-attachments: /data/attachments/# 报告导出详情 url - 前端score-detail-url: ${app.host.web}/#/process/start?processNo{}# api 文件下载 urlfile-download-url: ${app.host.web}/prod-api/sys_file_info/download/{}?fu…...

/// ts中的三斜线指令 | 前端

第一次看到注意到这行代码,不知道的还以为是注释呢,查了资料才知道这是typescript中的三斜线指令,那有什么作用呢? 1. 这行代码是TypeScript中的一个三斜线指令(Triple-Slash Directive),用于…...

什么岗位需要学习 OpenGL ES ?说说 3.X 的新特性

什么是 OpenGL ES OpenGL ES 是一种为嵌入式系统和移动设备设计的3D图形API(应用程序编程接口)。它是标准 OpenGL 3D 图形库的一个子集,专门为资源受限的环境(如手机、平板电脑、游戏机和其他便携式设备)进行了优化。 由于其在移动设备上的广泛适用性,OpenGL ES是学习移…...

【插件】多断言 插件pytest-assume

背景 assert 断言一旦失败,后续的断言不能被执行 有个插件,pytest-assume的插件,可以提供多断言的方式 安装 pip3 install pytest-assume用法 pytest.assume(表达式,f’提示message’) pytest.assume(表达式,f‘提示message’) pytest.ass…...

ctfshow DSBCTF web部分wp

ctfshow 单身杯 web部分wp web 签到好玩的PHP 源码&#xff1a; <?php error_reporting(0); highlight_file(__FILE__);class ctfshow {private $d ;private $s ;private $b ;private $ctf ;public function __destruct() {$this->d (string)$this->d;$this…...

三维点云 和模型转换的问题

随着科技的发展&#xff0c;三维激光扫描采集的点云数据作为一种新型的数据形式&#xff0c;在多个领域中都展现出了其强大的应用价值。那么&#xff0c;什么是点云数据&#xff1f;它是如何生成的&#xff1f;又能为我们的生活和工作带来哪些便利呢&#xff1f; 1&#xff0e…...

黑马智数Day7

获取行车管理计费规则列表 封装接口 export function getRuleListAPI(params) {return request({url: parking/rule/list,params}) } 获取并渲染数据 import { getRuleListAPI } from /apis/carmounted() {this.getRuleList() }methods: {// 获取规则列表async getRuleList(…...

虚拟机安装Ubuntu 24.04服务器版(命令行版)

这个是专门用于服务器使用的&#xff0c;没有GUI&#xff0c;常用软件安装&#xff0c;见 虚拟机安装Ubuntu 24.04及其常用软件(2024.7)_ubuntu24.04-CSDN博客https://blog.csdn.net/weixin_42173947/article/details/140335522这里只记录独特的安装步骤 1 下载Ubuntu 24.04安…...

.net core开发windows程序在国产麒麟操作系统中运行

.net core自从3.1版本号后&#xff0c;完全是一个独立的开源的多平台开发组件&#xff0c;目前国产化是趋势&#xff0c;不少项目需要开发国产如Kylin操作系统中运行的程序&#xff0c;无论是Web程序还是桌面程序&#xff0c;都有这样的需求。 首先&#xff0c;可明确的的.net…...

【LinuxC编程】06 - 守护进程,线程

进程组和会话 概念和特性 进程组&#xff0c;也称之为作业。BSD于1980年前后向Unix中增加的一个新特性。代表一个或多个进程的集合。每个进程都属于一个进程组。在waitpid函数和kill函数的参数中都曾使用到。操作系统设计的进程组的概念&#xff0c;是为了简化对多个进程的管…...

<websocket><PLC>使用js和html实现webscoket,与PLC进行socket通讯的实例

前言 本文是为了实现从网页端通过websocket与PLC端的socket进行数据通讯。 环境配置 系统:windows 平台:visual studio code 语言:javascript、html、PLC 库:node.js 概述 本文的目的是通过网页端与PLC进行socket通讯,但web端一般并不是直接使用socket,而是websocket,…...

nginx部署H5端程序与PC端进行区分及代理多个项目及H5内页面刷新出现404问题。

在项目中会碰见需要在nginx代理多个项目&#xff0c;如果在加上uniapp开发的H5端的项目&#xff0c;你还要在nginx中区分PC端和手机H5端&#xff0c;这就会让人很头大&#xff01;网上大部分的资料都是采用在nginx的conf配置文件中添加区分pc和手机端的变量例如&#xff1a;set…...

blenderFds代码解读

文章目录 一. 介绍1. FDS&#xff08;Fire Dynamics Simulator&#xff09;2. BlenderFDS 二. 下载代码三. 开发环境配置四. 代码解读1. blender python特有语法2. 代码结构2.1 变量名解释2.2 bl文件夹operators文件夹ui其他文件 2.2 lang文件夹bf_sceneON_GEOMON_MESHON_MOVEO…...

亚马逊评论爬虫+数据分析

爬取评论 做分析首先得有数据&#xff0c;数据是核心&#xff0c;而且要准确&#xff01; 1、爬虫必要步骤&#xff0c;选好框架 2、开发所需数据 3、最后测试流程 这里我所选框架是seleniumrequest&#xff0c;很多人觉得selenium慢&#xff0c;确实不快&#xff0c;仅针对此…...

新手小白学习docker第六弹------Docker常规安装(安装tomcat、mysql、redis)

目录 1 总体步骤2 安装tomcat2.1 搜索镜像2.2 拉取镜像2.3 查看镜像2.4 启动镜像2.5 访问猫首页 3 安装mysql3.1 搜索镜像3.2 拉取镜像3.3 启动镜像 4 安装redis4.1 拉取镜像4.2 启动镜像&#xff08;法1基础版&#xff09;4.3 配置文件4.3.1 在宿主机下新建目录 /app/redis4.3…...

ReactPress与WordPress:两大开源发布平台的对比与选择

ReactPress与WordPress&#xff1a;两大开源发布平台的对比与选择 在当今数字化时代&#xff0c;内容管理系统&#xff08;CMS&#xff09;已成为各类网站和应用的核心组成部分。两款备受欢迎的开源发布平台——ReactPress和WordPress&#xff0c;各自拥有独特的优势和特点&am…...

机器情绪及抑郁症算法

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月12日17点02分 点击开启你的论文编程之旅https://www.aspiringcode.com/content?id17230869054974 计算机来理解你的情绪&a…...

01-Ajax入门与axios使用、URL知识

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...