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.JpegImageFile

cat.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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软考高级《系统架构设计师》知识点(一)

计算机硬件 校验码 码距&#xff1a;就单个编码A:00而言&#xff0c;其码距为1&#xff0c;因为其只需要改变一位就变成另一个编码。在两个编码中&#xff0c;从A码到B码转换所需要改变的位数称为码距&#xff0c;如A:00要转换为B:11&#xff0c;码距为2。一般来说&#xff0c;…

【原创精品】基于Springboot3+Vue3的学习计划管理系统

大家好&#xff0c;我是武哥&#xff0c;最近给大家手撸了一个基于SpringBoot3Vue3的学习计划管理系统&#xff0c;可用于毕业设计、课程设计、练手学习&#xff0c;系统全部原创&#xff0c;如有遇到网上抄袭站长的&#xff0c;欢迎联系博主~ 项目演示视频 https://www.bili…

从零到一:我的元宵灯谜小程序诞生记

缘起&#xff1a;一碗汤圆引发的灵感 去年元宵节&#xff0c;我正捧着热腾腾的汤圆刷朋友圈&#xff0c;满屏都是"转发锦鲤求灯谜答案"的动态。看着大家对着手机手忙脚乱地切换浏览器查答案&#xff0c;我突然拍案而起&#xff1a;为什么不做一个能即时猜灯谜的微信…

RAG 在智能答疑中的探索

一、背景 得物开放平台是一个把得物能力进行开放&#xff0c;同时提供给开发者提供 公告、应用控制台、权限包申请、业务文档等功能的平台。 面向商家&#xff1a;通过接入商家自研系统。可以实现自动化库存、订单、对账等管理。 面向ISV &#xff1a;接入得物开放平台&#…

Flutter编译问题记录

问题&#xff1a; 运行出现以下报错 Launching lib/main.dart on macOS in debug mode... Warning: CocoaPods not installed. Skipping pod install. CocoaPods is a package manager for iOS or macOS platform code. Without CocoaPods, plugins will not work on iOS or …

长安汽车发布“北斗天枢2.0”计划,深蓝汽车普及全民智驾

2月9日&#xff0c;长安汽车智能化战略“北斗天枢2.0”计划暨深蓝汽车全场景智能驾驶解决方案发布会在重庆盛大召开。此次发布会标志着长安汽车正式迈入智能化战略的新纪元&#xff0c;携手众多“中国智驾合伙人”&#xff0c;共同开启全民智驾元年。 发布会上&#xff0c;长安…

Java--集合(理论)

目录 一、collection collection常用方法 1.List&#xff08;可以存在重复元素&#xff09; 迭代器 迭代器的概念 注意事项 例子 1.ArrayList 特点 2.LinkedLIst 特点 3.Vector 特点 2.Set&#xff08;无重复元素&#xff09; 1.HashSet 特点 2.Linkedhashset&…

三相绕线型异步电动机转子串电阻器起动的建模仿真

1.引言 2.起动方法与原理 3. 起动器的分级电阻计算 4. 起动时间计算 5.三相异步电动机瞬态数学模型 6. 三相绕线型异步电动机转子串电阻器系统仿真模型 7.实例仿真分析 8.总结 1.引言 三相绕线型异步电动机转子串电阻器起动的研究文章有很多很多&#xff0c;但大多数都不…

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

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

防洪先锋,应急防洪墙助力灾害应急响应|深圳鼎跃

在全球极端天气频发的背景下&#xff0c;洪涝灾害日益成为威胁人类安全的重要因素。传统的防洪措施如堤坝、沙袋虽有一定效果&#xff0c;但在突发性洪水面前往往难以迅速部署。 应急防洪墙是一种模块化、可移动的临时防洪结构&#xff0c;通过拼插、折叠或液压驱动快速形成刚性…

从Word里面用VBA调用NVIDIA的免费DeepSeekR1

看上去能用而已。 选中的文字作为输入&#xff0c;运行对应的宏即可&#xff1b;会先MSGBOX提示一下&#xff0c;然后相关内容追加到word文档中。 需要自己注册生成好用的apikey Option ExplicitSub DeepSeek()Dim selectedText As StringDim apiKey As StringDim response A…

高通android WIFI debug

参考高通文档&#xff1a;80-76240-16_REV_AA_Wi-Fi_Debug_Techniques 大纲 一、 WLAN Debug Logs –logcat ■ Logcat log logcat is a command-line tool that dumps the log of system messages, ■ Including stack traces when the device throws an error. ■ Need t…

Python:凯撒密码

题目内容&#xff1a; 凯撒密码是古罗马恺撒大帝用来对军事情报进行加密的算法&#xff0c;它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列该字符后面第三个字符&#xff0c;对应关系如下&#xff1a; 原文&#xff1a;A B C D E F G H I J K L M N O P Q R …

基于STM32的智能鱼缸水质净化系统设计

&#x1f91e;&#x1f91e;大家好&#xff0c;这里是5132单片机毕设设计项目分享&#xff0c;今天给大家分享的是智能鱼缸水质净化系统。 目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 1、设计要求…

STM32系统架构介绍

STM32系统架构 1. CM3/4系统架构2. CM3/4系统架构-----存储器组织结构2.1 寄存器地址映射&#xff08;特殊的存储器&#xff09;2.2 寄存器地址计算2.3 寄存器的封装 3. CM3/4系统架构-----时钟系统 STM32 和 ARM 以及 ARM7是什么关系? ARM 是一个做芯片标准的公司&#xff0c…

美甲美睫门店拓客营销小程序开发

一套针对美甲美睫门店开发的营销拓客小程序 小程序支持线上线下服务预约、客户管理、多种客户营销方式以及员工管理、门店管理、门店营销活动创建开展等等。 用户端&#xff1a;服务预约、次卡、时卡办理&#xff0c;会员办理、会员升级、会员权益&#xff0c;复购攒积分&…

deepseek+“D-id”或“即梦AI”快速生成短视频

1、deepseek生成视频脚本 1.1、第一步&#xff1a;使用通用模板提出需求&#xff0c;生成视频脚本 对话输入示例脚本1&#xff1a; 大年初五是迎财神的日志&#xff0c;帮我生成10秒左右的短视频&#xff0c; 体现一家3口在院子里欢庆新年&#xff0c; 孩子在院子里放鞭炮烟…

【STM32】ADC|多通道ADC采集

本次实现的是ADC实现数字信号与模拟信号的转化&#xff0c;数字信号时不连续的&#xff0c;模拟信号是连续的。 1.ADC转化的原理 模拟-数字转换技术使用的是逐次逼近法&#xff0c;使用二分比较的方法来确定电压值 当单片机对应的参考电压为3.3v时&#xff0c;0~ 3.3v(模拟信…

从零到一:基于Rook构建云原生Ceph存储的全面指南(上)

文章目录 一.Rook简介二.Rook与Ceph架构2.1 Rook结构体系2.2 Rook包含组件1&#xff09;Rook Operator2&#xff09;Rook Discover3&#xff09;Rook Agent 2.3 Rook与kubernetes结合的架构图如下2.4 ceph特点2.5 ceph架构2.6 ceph组件 三.Rook部署Ceph集群3.1 部署条件3.3 获取…

如何在本地部署deepseek?

1、打开ollama官网&#xff0c;点download&#xff08;下载需要翻墙 https://ollama.com/ 2、双击下载好的OllamaSetup.exe&#xff0c;一直点下一步即可。 3、winR 输入cmd&#xff0c;打开命令提示符&#xff0c;输入ollama。有以下提示即安装完成。 4、可以根据 nvidia-…