jupyter notebook中3种读图片的方法_与_图片翻转(上下翻转,左右翻转,上下左右翻转)

已有图片cat.jpg

image-20250211143332537

相对于代码的位置,可以用./cat.jpg进行读取。

下面是3种读图片的方法。

1.python读图片-pillow

图片文件不适合用open去读取

用open读图片,易引发UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence错误。

PIL 是 Python Imaging Library 的缩写,它是一个非常流行的图像处理库,提供了广泛的图像处理功能,比如打开、保存、转换、调整大小、裁剪、旋转等操作。

然而,PIL 本身已经不再更新和维护,取而代之的是一个称为 Pillow 的库。Pillow 是 PIL 的一个友好的分支和升级版本,现如今它是使用 PIL 功能的标准库。


Pillow读图片

安装依赖(Jupyter notebook)

! pip install Pillow
image-20250211143805172

导入依赖读图片:

from PIL import Image
cat = Image.open('./cat.jpg')
cat
image-20250211143920163

补充:不同格式的图片

JPG 或 JPEG(Joint Photographic Experts Group)是广泛使用的图像压缩格式,主要用于存储彩色照片。

JPEG 图像采用的是8位颜色深度的表示方式。(0-255)

每个颜色通道(红色、绿色、蓝色)都使用一个 8-bit 数值来表示,即 0 到 255 之间的整数。每个像素由三个颜色通道组成(RGB 模式),每个通道的值都在 0 到 255 之间。这里的 0 代表最暗的颜色,255 代表最亮的颜色。

  • 例如,一个红色像素的 RGB 值可能是 (255, 0, 0),表示完全的红色,绿色和蓝色通道的值是 0。

JPG 图像通常使用压缩算法对数据进行有损压缩,因此它的文件体积较小,但也会牺牲一些图像的细节和质量。


PNG(Portable Network Graphics)是一种无损压缩格式,常用于需要保持透明度的图像(例如网页上的图标、图像等)。PNG 支持不同的颜色深度,可以是 8位16位,但通常以 8位 来存储 RGB 图像数据。并且,PNG 格式的图像可以包含 透明通道(即 RGBA 模式,其中 A 表示透明度)。

  • 像素值范围:PNG 图像通常使用浮点数表示像素的颜色值,范围从 0 到 1。例如,每个颜色通道(R、G、B)的像素值被表示为 0 到 1 之间的小数值,这种方式是浮动值而非整数值。
    • 例如,一个红色像素的 RGB 值可能是 (1.0, 0.0, 0.0),表示完全的红色,绿色和蓝色通道的值是 0。这些值是浮动的,而不是整数形式。

PNG 是一种 无损压缩格式,即不会丢失任何图像细节。虽然它可能比 JPG 图像更大,但保留了原始图像的所有信息。


总结:

JPG/JPEG:使用 0 到 255 范围的整数来表示图像中的每个像素的 RGB 值,适合压缩图像(有损压缩)。

PNG:使用 0 到 1 之间的小数值来表示图像中的每个像素的 RGB 值,适合需要高质量和无损压缩的图像,特别是在透明通道的处理中。


对图片进行简单操作

type(cat)  # PIL.JpegImagePlugin.JpegImageFilecat.size # (730, 456)

补充:

cat.size: 这是 PillowImage 对象的一个属性,返回图像的尺寸信息。具体来说,cat.size 返回一个元组 (width, height),其中:

  • width 是图像的宽度(以像素为单位)
  • height 是图像的高度(以像素为单位)
cat.mode # 'RGB'

补充:

除了 RGB,Pillow 还支持多种颜色模式,每种模式有不同的表示方式和用途。例如:

  • ‘L’:灰度模式(Luminance),表示图像是灰度图像,每个像素只有一个通道,范围是 0 到 255。
  • ‘RGBA’:RGBA 模式表示图像包含红、绿、蓝和透明度(Alpha)通道。每个像素由四个通道的值组成,透明度通道用于表示图像的透明部分。
  • ‘CMYK’:印刷领域使用的颜色模式,表示青色(Cyan)、品红(Magenta)、黄色(Yellow)和黑色(Key)。
  • ‘1’:黑白模式,每个像素只有两个值:0(黑色)和 1(白色)。
cat.getchannel(2)
image-20250211144700659

cat.getchannel(2) 是用于从图像中提取指定通道的一个方法。这里的 2 表示我们要获取图像中的第三个颜色通道。

  • 0:红色通道 ®
  • 1:绿色通道 (G)
  • 2:蓝色通道 (B)

如果图像是 RGBA 模式(即包含透明通道的图像),通道索引 0123 分别代表红色、绿色、蓝色和透明度(Alpha)通道。


可以直接通过np.array把pillow读取的image对象转换成ndarray

import numpy as np
catArr = np.array(cat)
image-20250211144928116

注意:

cat.size
catArr.shape
image-20250211145021889

cat.size(来自 PIL.Image 对象),图像的尺寸(宽度和高度),表示图像的大小(以像素为单位)。

catArr.shape(来自 numpy 数组),数组的形状(即数组的维度信息)。在将 PIL.Image 对象转换为 numpy 数组后,图像数据就被存储为一个 多维数组

456:图像的 高度(行数)

730:图像的 宽度(列数)

3:表示图像是 RGB 格式,每个像素包含 3 个颜色通道(红色、绿色、蓝色),因此是一个 3 通道的彩色图像。

即:

catArr.shape 返回的是 numpy 数组的形状,它包含三个维度:

  • 第一个维度:图像的高度(即行数)
  • 第二个维度:图像的宽度(即列数)
  • 第三个维度:图像的颜色通道数(对于 RGB 图像是 3)

2.opencv读图片

下载依赖(如果有必要,重启内核),下面指定了下载源—豆瓣

注:

豆瓣源: https://pypi.douban.com/simple

清华源: https://pypi.tuna.tsinghua.edu.cn/simple

!pip install opencv-python -i https://pypi.douban.com/simple
image-20250211145453145

导入依赖读图片:

import cv2
cat_cv = cv2.imread('./cat.jpg')
image-20250211145611010

opencv默认的颜色空间是BGR

展示图片:

cv2.imshow('cat', cat_cv)
cv2.waitKey(0)
cv2.destroyAllWindows()

会有弹窗:

image-20250211145710266

注:

1.cat_cv 是一个 NumPy 数组

2.cv2.imshow() 用来在一个窗口中显示图像。它的第一个参数是窗口的名称(在这里是 'cat'),第二个参数是要显示的图像数据(cat_cv)。

3.cv2.waitKey(0) 会暂停程序的执行,等待用户在显示图像窗口中按下任意键。如果传入的参数是 0,表示无限期等待直到用户按下一个键。如果传入的是正整数参数,表示等待指定的毫秒数。如果在这段时间内用户按下键,则继续执行程序。通常用于处理图像时添加时间延迟。

4.cv2.destroyAllWindows() 会关闭所有由 cv2.imshow() 打开的窗口。在图像显示完并等待按键后,调用此函数来销毁所有显示的 OpenCV 窗口。

3.matplotlib读取图片

导入依赖:

import matplotlib.pyplot as plt

读图片:

cat_plt = plt.imread('./cat.jpg')
image-20250211150530460

可以看出,也是RGB模式。

展示图片:

plt.imshow(cat_plt)
image-20250211150635443

输出 <matplotlib.image.AxesImage at 0x1224862b0>,这表示你在图像显示过程中实际上得到了一个 AxesImage 对象。它是 matplotlib 用来表示图像数据的对象类型。

<matplotlib.image.AxesImage at 0x1224862b0>:这是 Python 解释器打印出来的对象的字符串表示。它显示了 AxesImage 对象的类型和内存地址(这里是 0x1224862b0)。每次你创建新的图像对象时,内存地址会不同,因此这里的地址可能会发生变化。

如果不希望显示,则加一句plt.axis('off')即可。


对图片进行翻转

如何上下翻转, 左右翻转, 上下左右都翻转?颜色翻转?

实质就是操作NumPy数组

注意维度信息:

cat_plt.shape   # (456, 730, 3)   456高,730宽,3颜色
# 上下
plt.imshow(cat_plt[::-1])
image-20250211151912082
# 左右
plt.imshow(cat_plt[::,::-1])
image-20250211151927884
# 上下左右都翻转
plt.imshow(cat_plt[::-1,::-1])
image-20250211151943630
# 颜色翻转---》R和B两个转换下
plt.imshow(cat_plt[::,::,::-1])
image-20250211152005377

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

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

相关文章

文理医院预约挂号系统的设计与实现(代码+数据库+LW)

摘要 近年来&#xff0c;信息化管理行业的不断兴起&#xff0c;使得人们的日常生活越来越离不开计算机和互联网技术。首先&#xff0c;根据收集到的用户需求分析&#xff0c;对设计系统有一个初步的认识与了解&#xff0c;确定文理医院预约挂号系统的总体功能模块。然后&#…

从MySQL优化到脑力健康:技术人与效率的双重提升

文章目录 零&#xff1a;前言一&#xff1a;MySQL性能优化的核心知识点1. 索引优化的最佳实践实战案例&#xff1a; 2. 高并发事务的处理机制实战案例&#xff1a; 3. 查询性能调优实战案例&#xff1a; 4. 缓存与连接池的优化实战案例&#xff1a; 二&#xff1a;技术工作者的…

本地部署DeepSeek R1 + 界面可视化open-webui

本地部署DeepSeek R1 界面可视化open-webui ollama是物理机本地安装 open-webui是容器启动 另外&#xff0c;用docker 部署ollama也很方便ollama docker 安裝部署ollama ollama官网 安装 Linux上安装: curl -fsSL https://ollama.com/install.sh | sh使用命令行管理 拉…

Oracle常用导元数据方法

1 说明 前两天领导发邮件要求导出O库一批表和索引的ddl语句做国产化测试&#xff0c;涉及6个系统&#xff0c;6千多张表&#xff0c;还好涉及的用户并不多&#xff0c;要不然很麻烦。 如此大费周折原因&#xff0c;是某国产库无法做元数据迁移。。。额&#xff0c;只能我手动导…

win32汇编环境,对线程的创建与操作示例二

;运行效果 ;win32汇编环境,对线程的创建与操作示例二 ;本文主要是实现用CreateThread创建线程时,如何把参数传入进去 ;以下举3个例子说明,如何把数值、字符串和自定义结构传入线程之中 ;下面为asm文件 ;>>>>>>>>>>>>>>>>>…

【Obsidian】当笔记接入AI,Copilot插件推荐

当笔记接入AI&#xff0c;Copilot插件推荐 自己的知识库笔记如果增加AI功能会怎样&#xff1f;AI的回答完全基于你自己的知识库余料&#xff0c;是不是很有趣。在插件库中有Copilot插件这款插件&#xff0c;可以实现这个梦想。 一、什么是Copilot&#xff1f; 我们知道githu…

【DeepSeek】deepseek可视化部署

目录 1 -> 前文 2 -> 部署可视化界面 1 -> 前文 【DeepSeek】DeepSeek概述 | 本地部署deepseek 通过前文可以将deepseek部署到本地使用&#xff0c;可是每次都需要winR输入cmd调出命令行进入到命令模式&#xff0c;输入命令ollama run deepseek-r1:latest。体验很…

html为<td>添加标注文本

样式说明&#xff1a; /*为td添加相对定位点*/ .td_text {position: relative; }/*为p添加绝对坐标(相对于父元素中的定位点)*/ .td_text p {position: absolute;top: 80%;font-size: 8px; }参考资料&#xff1a;

操作系统常见调度算法的详细介绍

目录 1. 先进先出算法&#xff08;FIFO&#xff09; 2. 前后台调度算法 3. 最短处理机运行期优先调度算法&#xff08;短进程优先算法&#xff09; 4. 最高响应比优先调度算法&#xff08;HRRN&#xff09; 5. 优先级调度算法 6. 时间片轮转调度算法 7. 多级反馈队列轮转…

(定时器,绘制事件,qt简单服务器的搭建)2025.2.11

作业 笔记&#xff08;复习补充&#xff09; 1> 制作一个闹钟软件 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> //按钮类 #include <QTimer> //定时器类 #include <QTime> //…

评估多智能体协作网络(MACNET)的性能:COT和AUTOGPT基线方法

评估多智能体协作网络(MACNET)的性能 方法选择:选择COT(思维链,Chain of Thought)、AUTOGPT等作为基线方法。 COT是一种通过在推理过程中生成中间推理步骤,来增强语言模型推理能力的方法,能让模型更好地处理复杂问题,比如在数学问题求解中,展示解题步骤。 AUTOGPT则是…

5-R循环

R 循环 ​ 有的时候&#xff0c;我们可能需要多次执行同一块代码。一般情况下&#xff0c;语句是按顺序执行的&#xff1a;函数中的第一个语句先执行&#xff0c;接着是第二个语句&#xff0c;依此类推。 编程语言提供了更为复杂执行路径的多种控制结构。 循环语句允许我们多…

用Python编写经典《贪吃蛇》小游戏

文章目录 环境准备依赖库 实现思路核心模块设计 代码框架运行效果优化建议总结通过本框架可实现基础版贪吃蛇游戏&#xff0c;关键点在于&#xff1a;典型问题解决方案&#xff1a; 环境准备 依赖库 主要依赖 Python 3.6pygame 2.1.2 # 用于图形界面渲染 安装命令 pip ins…

IDEA接入DeepSeek

IDEA 目前有多个途径可以接入deepseek&#xff0c;比如CodeGPT或者Continue&#xff0c;这里借助CodeGPT插件接入&#xff0c;CodeGPT目前用的人最多&#xff0c;相对更稳定 一、安装 1.安装CodeGPT idea插件市场找到CodeGPT并安装 2.创建API Key 进入deepseek官网&#xf…

aspectFill(填充目标区域的同时保持图像的原有宽高比 (aspect ratio)图像不会被拉伸或压缩变形

“aspectFill” 是一个常用于图像和视频处理的术语&#xff0c;尤其是在用户界面 (UI) 设计和图形编程领域。它描述的是一种图像缩放或调整大小的方式&#xff0c;旨在填充目标区域的同时保持图像的原有宽高比 (aspect ratio)。 更详细的解释: Aspect Ratio (宽高比): 指的是图…

在 Windows 系统中如何快速进入安全模式的两种方法

在使用电脑的过程中&#xff0c;有时我们可能会遇到一些需要进入“安全模式”来解决的问题。安全模式是一种特殊的启动选项&#xff0c;它以最小化配置启动操作系统&#xff0c;仅加载最基本的驱动程序和服务&#xff0c;从而帮助用户诊断和修复系统问题。本文中简鹿办公将详细…

CNN-LSTM卷积神经网络长短期记忆神经网络多变量多步预测,光伏功率预测

CNN-LSTM卷积神经网络长短期记忆神经网络多变量多步预测&#xff0c;光伏功率预测 一、引言 1.1、研究背景和意义 光伏发电作为一种清洁能源&#xff0c;对于实现能源转型和应对气候变化具有重要意义。然而&#xff0c;光伏发电的输出功率具有很强的间歇性和波动性&#xff…

Matlab工具包安装

一&#xff0c;直接下载源码并配置方式 tensortoolbox地址&#xff1a;https://www.tensortoolbox.org/ 参考地址&#xff1a;https://blog.csdn.net/qq_37637914/article/details/116016157 二&#xff0c;从官方商店下载-需要登录

单片机之基本元器件的工作原理

一、二极管 二极管的工作原理 二极管是一种由P型半导体和N型半导体结合形成的PN结器件&#xff0c;具有单向导电性。 1. PN结形成 P型半导体&#xff1a;掺入三价元素&#xff0c;形成空穴作为多数载流子。N型半导体&#xff1a;掺入五价元素&#xff0c;形成自由电子作为多…

C++ 模板

一、非类型模板参数 模板参数分类&#xff1a;类型形参与非类型形参。 类型形参&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 非类型形参:就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当成常…