PIL笔记:通道+模式+坐标系统+基本图像操作

news2024/12/23 6:49:55

PIL

Python Imaging Library,Python的图像处理核心库

通道bands

灰度图片是单通道组成
彩色图片是三通道RGB组成
真彩色图片是四通道RGBA组成

模式

RGB
RGBA

坐标系统

左上角为原点(0, 0)

图像操作

显示图像

  • show

创建图像

  • open()打开图像
  • new()创建Image对象
  • numpy数组创建Image对象
打开图像
import numpy as np
from PIL import Image

img = Image.open('../20240110/img/1.jpg')
# print(img.mode)
# RGB
# print(img.size)
# (640, 480)

img_data = np.array(img)
print(img_data.shape)
# (480, 640, 3)

# img.show()

image.png

创建图像
from PIL import Image
import numpy as np

arr = np.zeros((300, 400, 3), dtype=np.uint8)
print(arr.shape)
# (300, 400, 3)
h, w, c = arr.shape
arr[:, :w//2] = (0, 0, 255)
arr[:, w//2:] = (255, 255, 0)

# np数组转换为PIL图像
img = Image.fromarray(arr)
img.show()

image.png

保存图像
from PIL import Image

img = Image.open('../20240110/img/1.jpg')
# img.convert(mode='RGB')
# img.save('../20240110/img/1_bak.png')
img = img.resize((100, 100))
img.show()

image.png

Image属性

  • mode
  • size
    • weight
    • height
  • format

图片格式转换

  • save()保存图像
  • convert()图像格式转换

图像缩放

  • resize()实现任意缩小和放大图像
    • size
    • resample
    • box
from PIL import Image

img = Image.open('../20240110/img/1.jpg')
img = img.resize((50, 100), box=(0, 0, 100, 100))
img.show()

image.png

图像分离与合并

  • split
  • merge
分割图像
from PIL import Image

img = Image.open('snower.jpg')
# RGB
r, g, b = img.split()
r.show()
g.show()
b.show()
img.show()

# img = Image.merge(mode='RGB', bands=(r, g, b))
# img.show()

image.png

合并图像
from PIL import Image

img = Image.open('snower.jpg')
# RGB
r, g, b = img.split()
# r.show()
# g.show()
# b.show()
# img.show()

img = Image.merge(mode='RGB', bands=(r, g, b))
img.show()

image.png

图像裁剪

  • crop
from PIL import Image

img = Image.open('snower.jpg')
w, h = img.size
box_left = (0, 0, w // 2, h)
crop_img_left = img.crop(box_left)
crop_img_left.show()
box_right = (w // 2, 0, w, h)
crop_img_right = img.crop(box_right)
crop_img_right.show()

image.png

图像几何变换

  • transpose
  • rotate
旋转
from PIL import Image


img = Image.open('snower.jpg')
# 旋转
img = img.transpose(Image.Transpose.ROTATE_90)
img.show()

# 旋转 平移
# img = img.rotate(45, translate=(50, 50), fillcolor='blue')
# img.show()

image.png

旋转+填充颜色
from PIL import Image


img = Image.open('snower.jpg')
# 旋转
# img = img.transpose(Image.Transpose.ROTATE_90)
# img.show()

# 旋转 平移
img = img.rotate(45, translate=(50, 50), fillcolor='blue')
img.show()

image.png

图像粘贴

  • paste
from PIL import Image

img_snow = Image.open('snower.jpg')
img_py = Image.open('py.jpg')
w, h = img_py.size
# 176 100
img_snow.paste(img_py, box=(0, 50, w, 50 + h))
img_snow.show()

image.png

图像上添加文字

  • ImageDraw
  • ImageFont
  • text
  • np创建PIL图像
    • fromarray
"""
1. 图像 画布
2. 使用工具
3. 绘制
"""

from PIL import Image, ImageDraw, ImageFont

img = Image.open('snower.jpg')
draw = ImageDraw.Draw(img)
# font = ImageFont.truetype('', size=24)
draw.text((100, 50), text='hello world', fill='blue')
img.show()

image.png

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

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

相关文章

嵌入式学习-C++-Day1

嵌入式学习-CDay1 一、思维导图 二、作业 1.提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数&#xff08;要求使用C风格字符串完成&#xff09; #include <iostream> #include <string.h>using namespace…

shopee母婴选品:Shopee平台上进行母婴类目的选品

在Shopee平台上进行母婴类目的选品时&#xff0c;卖家可以通过一些策略来提高产品的市场竞争力和销售业绩。下面将详细介绍这些策略。 先给大家推荐一款shopee知虾数据运营工具知虾免费体验地址&#xff08;复制浏览器打开&#xff09;&#xff1a;D。dDqbt。Com/JU5o知虾是Sh…

考研C语言刷题基础篇之分支循环结构基础(二)

目录 第一题分数求和 第二题&#xff1a;求10 个整数中最大值 第三题&#xff1a;在屏幕上输出9*9乘法口诀表 第四题&#xff1a;写一个代码&#xff1a;打印100~200之间的素数 第五题&#xff1a;求斐波那契数的第N个数 斐波那契数的概念&#xff1a;前两个数相加等于第三…

3.Eureka注册中心

3.Eureka注册中心 假如我们的服务提供者user-service部署了多个实例&#xff0c;如图&#xff1a; 大家思考几个问题&#xff1a; order-service在发起远程调用的时候&#xff0c;该如何得知user-service实例的ip地址和端口&#xff1f;有多个user-service实例地址&#xff0…

git clone报错 fatal: unable to fork

1. 问题 git clone gitgithub.com:url-kaist/Quatro.git Cloning into Quatro... fatal: unable to fork 在使用Docker clone 代码时报错 2. 解决方法 查看是否安装openssh&#xff0c; 用以下命令查看系统是否已安装OpenSSH&#xff0c;如果有openssh-client和openssh-serve…

Oracle、MySQL数据库常规命令语法-简易记录(非常规持续更新)

前言:呈现的是非常基础必备命令以及常规关联语法,因涉及到不同数据库其表达都会有所区别,此篇纯属做个仓库记录更非常规持续更新,专业人士可忽略,且看且珍惜… MySQL: 关系型数据库、重点开源、支持大型规模、标准SQL数据语言、多平台多架构、高可用集群、可定制开发等…

php基础学习之变量

php使用变量的必要性 PHP 是一种动态网站开发的脚本语言&#xff0c;动态语言特点是交互性&#xff0c;会有数据的传递&#xff0c;而 PHP作为“中间人”&#xff0c;需要进行数据的传递&#xff0c;传递的前提就是 PHP 能自己存储数据(临时存储) php变量的命名规则 必须以do…

邯郸银行2023年营收、利润双降:四季度亏损超1亿元,承压明显

近日&#xff0c;邯郸银行发布《2024年度同业存单发行计划》&#xff0c;披露了2023年部分财务数据。信息显示&#xff0c;邯郸银行2023年实现营业收入34.03亿元&#xff0c;同比下降0.98%&#xff1b;净利润6.21亿元&#xff0c;同比下降58.51%。 而结合此前的财务数据测算可知…

grid布局,flex布局实现类似响应式布局的效果

一. grid布局 实现代码 <!DOCTYPE html> <html lang"en"><head><style>.box {display: grid;grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); /*自动填充&#xff0c;最小宽度300px*/justify-content: space-between;gap:…

CC工具箱使用指南:【平差工具】

一、简介 平差是一个摘自英文单词“adiustment”的中文翻译&#xff0c;它最初源于土地测量工程&#xff0c;并在后来广泛应用于各个测量领域在传统的测量中&#xff0c;由于各种误差的存在&#xff0c;例如仪器、人为、大地形态等因素&#xff0c;所得到的测量结果是不完全准…

Android开发之部署opencv4

1 新建一个空项目 不再多说 2从官网下载opencv https://opencv.org/releases/ 下载opencv-4.9.0-android-sdk 3 导入模块 点击file->new->Import Module选择解压之后的opencv-android-sdk文件夹中的SDk文件夹&#xff0c;并将:sdk修改为:opencv&#xff08;我的已安…

MySQL 初识MySQL

目录 1 数据库1.1 前言1.2 数据库分类1.2.1 关系型数据库&#xff08;RDBMS&#xff09;1.2.2 非关系型数据库1.2.3 关系型数据库与非关系型数据库的区别 2 链接数据库3 SQL分类4 存储引擎 1 数据库 1.1 前言 到底什么是MySQL? 大家都知道MySQL叫做数据库。那么什么是数据库…

设置 SSH 主机 xxx: (details) 连接到 VS Code Server - 重试 6

问题背景 在vscode上ssh连接到某台服务器的时候一直显示重试&#xff0c;但在本地终端里却可以正常ssh。 解决方案 按 Ctrl Shift P 打开命令面板。输入 Remote-SSH: Kill VS Code Server on Host…。选择出现问题的服务器即可。 猜测是本地的vscode与远程服务器的 ~/.vsc…

SpringBoot责任链与自定义注解:优雅解耦复杂业务

引言 责任链模式是一种行为设计模式&#xff0c;它允许你将请求沿着处理者链进行传递&#xff0c;直到有一个处理者处理请求。在实际应用中&#xff0c;责任链模式常用于解耦发送者和接收者&#xff0c;使得请求可以按照一定的规则被多个处理者依次处理。 首先&#xff0c;本…

编译和链接---C语言

引言 众所周知&#xff0c;C语言是一门高级的编程语言&#xff0c;是无法被计算机直接读懂的&#xff0c;C语言也不同于汇编PHP&#xff0c;无法直接翻译成机器语言&#xff0c;在学习的过程中&#xff0c;你是否好奇过我们所敲的C语言代码&#xff0c;是如何一步步翻译成机器…

量化交易学习1

一、股票数据基本分类 可分为&#xff08;1&#xff09;技术面数据和&#xff08;2&#xff09;基本面数据 &#xff08;1&#xff09;技术面数据 技术面数据是通过股票的历史价格和交易量等市场数据进行计算和分析得出的指标。常用的技术指标包括移动平均线、相对强弱指标、…

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

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

Linux的奇妙冒险———vim的用法和本地配置

vim的用法和本地配置 一.vim的组成和功能。1.什么是vim2.vim的多种模式 二.文本编辑&#xff08;普通模式&#xff09;的快捷使用1.快速复制&#xff0c;粘贴&#xff0c;剪切。2.撤销&#xff0c;返回上一步操作3.光标的控制4.文本快捷变换5.批量化操作和注释 三.底行模式四.v…

LeakCanary原理 弱引用与垃圾回收

LeakCanary LeakCanary 通过 hook Android 的生命周期来自动检测 Activity 和 Fragment 何时被销毁&#xff0c;何时应该被垃圾回收&#xff0c;这些被 destroy 的对象被传递给 ObjectWatcher&#xff0c;ObjectWatcher 持有对它们的弱引用 检测对象类型 已销毁的 Activity …

数据结构—基础知识(九):树和二叉树(a)

数据结构—基础知识&#xff08;九&#xff09;&#xff1a;树和二叉树(a) 树的定义 树(Tree)是n&#xff08;n≥0&#xff09;个结点的有限集&#xff0c;它或为空树&#xff08;n0&#xff09;&#xff1b;或为非空树&#xff0c;对于非空树T&#xff1a; 有且仅有一个称之…