四、计算机视觉-图像的读取显示与保存

本文介绍了如何在Python中使用OpenCV和Matplotlib库进行图像的读取、显示调整通道顺序以及保存,包括不同方式的文件读取、在Jupyter和窗口中显示图片,以及图片保存时的格式转换。
摘要由CSDN通过智能技术生成


前言

图像是计算机视觉领域的基本数据载体,理解图像的读取、显示与保存是进行图像处理、分析和识别的第一步。
本节课我们不光是为了学习处理图像的那些方法如何使用,更重要的是从本节课学习能让你对计算机世界中的图像有一个更清晰的认识。
在本课程中,我们将学习如何使用Matplotlib和OpenCV库来实现图像的读取、显示和保存操作。我们将从最基本的图像处理开始,介绍图像读取的方法,讨论图像的通道顺序,然后深入探讨图像的显示与可视化,以及图像的保存格式和质量参数。上节课我们探讨了计算机世界中图像的概念,而本节课我们将通过代码实际展示图像数据,从而深入了解图像处理的实际操作过程。

一、导入包

import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

cv2:是opencv,opencv提供了丰富的图像处理和计算机视觉算法,通过它可以调用OpenCV中的各种函数来实现图像读取、处理、分析等操作。
numpy:提供了对多维数组的处理各种方法,我们可以用他处理图像的数组数据
matplotlib:用于显示图像、绘制图表和可视化数据。方便我们一会绘图的展示。
%matplotlib inline:这行意思是我们展示图直接在jupyter中显示,而不是在打开一个外部的窗口显示我们的图片,这样方便我们查看。另外说明一下在jypyter中每行代码都需要我们单独去执行一下,如果上面代码不执行 我们直接执行下面的代码就会出错。执行代码的快捷键是shift+enter

二、图像的读取

image = cv2.imread(filename, flags)
flags 是一个可选参数,用于指定读取图像的方式。常用的取值有:
cv2.IMREAD_COLOR:以彩色模式读取图像(默认)。
cv2.IMREAD_GRAYSCALE:以灰度模式读取图像。
cv2.IMREAD_UNCHANGED:保持图像原有的通道数,包括 alpha 通道。
imread() 函数会返回一个 numpy 数组,代表读取的图像数据。如果指定的文件路径不存在或者文件格式不正确,imread() 函数会返回一个空的 numpy 

比如我本地有一个图片 我可以使用下面代码读取我本地的图片

img = cv2.imread('./img/image.jpg')

我们查看下img的内容:

在这里插入图片描述
可以看到返回的数据是一个三维数组,其中的1维数组表示一个像素点,比如70,88,111就是表示第一个像素,结合我们上面一节的课程,我们知道每个像素点是由RGB三个值组成的。这个三维数 组表示,图像的高度,即像素的行数和像素的宽度 ,即像素的列数。
还有图片的通道,我们可以通过cv2.shape看下图像维度信息
显示:

(480, 320, 3)  #这个代表高度是480像素,宽度是320像素,是3个通道

三、图片的显示

1、在jupyter中显示图片

我们显示图片看一下:

plt.imshow(img)

在这里插入图片描述

我们发现图片显示的有点奇怪,不是我的原图。这是为什么呢?因为我们通过opencv导入的图片默认的通道是BGR,而matplotlib处理图片默认则是以RGB的方式,所以读取和显示的通道顺序反了导致显示的图片不正常,我们需要手动转换一下通道顺序,我们吧opencv读取的图片通道顺序改为RGB这样就能和matplotlib一致了,

img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

我们查看下转换后的图片,现在显示的就正常了
在这里插入图片描述

2、在窗口中显示图片

    cv2.imshow('demo',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

上面代码可以在窗口中显示图片 waitkey就是等待我们输入,也就是我们按了任意键之后执行后面的代码 销毁窗口,因为这个使用cv2显示的,读取也是cv2,所以不用对通道进行转换 就能正常显示。

四、图片的保存

当我们对图像做了一系列处理之后,想把图片保存出来,可以使用以下方法
1、使用opencv保存:

cv2.imwrite('output_image.jpg', img)

2、使用Matplotlib保存

# 将 BGR 转换为 RGB
image_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 保存图像(Matplotlib 保存的图像通道顺序是 RGB)
plt.imsave('output_image.jpg', image_rgb)

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值