3Darray 修改array值然后保存图片

from PIL import Image
import numpy as np img_path = './000001.jpg'
# 读取图片
image = Image.open(img_path)
width, height = image.size
print("图片的宽度为={},高度为={}".format(width,height))
print("图片的mode为{}".format(image.mode))
print("图片的format为{}".format(image.format))
pixel = image.load()
img_arr = np.array(image)
print("图片数组大小为{}".format(img_arr.shape))print("图片像素值最大为{}".format(np.max(img_arr)))
print("图片像素值最大为{}".format(np.min(img_arr)))
#显示图片
image.show()
# 

结果如下
在这里插入图片描述

修改array值并存储

from PIL import Image
import numpy as np# 我可以把array里面的值给改了,然后重新显示,这样就可以重新显示图片了
for i in range(100):for j in range(100):img_arr[i,j,0] = 255img_arr[i,j,1] = 0 img_arr[i,j,2] = 0pil_img = Image.fromarray(img_arr)
print(pil_img.mode)
# RGB
pil_img.save('./lena_save_pillow.jpg')

结果如下
在这里插入图片描述
后面我摸索出了一些很有意思的赋值情形,有时我都忘了还能这么做

from PIL import Image
import numpy as npimg_path = './000001.jpg'
# 读取图片
image = Image.open(img_path)
width, height = image.size
print("图片的宽度为={},高度为={}".format(width,height))
print("图片的mode为{}".format(image.mode))
print("图片的format为{}".format(image.format))
pixel = image.load()
img_arr = np.array(image)
print("图片数组大小为{}".format(img_arr.shape))print("图片像素值最大为{}".format(np.max(img_arr)))
print("图片像素值最大为{}".format(np.min(img_arr)))
#显示图片
image.show()# 我可以把array里面的值给改了,然后重新显示,这样就可以重新显示图片了
for i in range(100):for j in range(100):img_arr[i,j,:] = [255,0,0] ## 注意numpy array是可以一次性赋值的,不需要一个个赋值pil_img = Image.fromarray(img_arr)
print(pil_img.mode)
# RGB
pil_img.save('./lena_save_pillow.jpg')

结果如下
在这里插入图片描述
看这里,不需要弄两个循环,可以直接用一个列表进行赋值,还是很方便的

按照条件进行赋值

from PIL import Image
import numpy as npimg_path = './000001.jpg'
# 读取图片
image = Image.open(img_path)
width, height = image.size
print("图片的宽度为={},高度为={}".format(width,height))
print("图片的mode为{}".format(image.mode))
print("图片的format为{}".format(image.format))
pixel = image.load()
img_arr = np.array(image)
print("图片数组大小为{}".format(img_arr.shape))print("图片像素值最大为{}".format(np.max(img_arr)))
print("图片像素值最大为{}".format(np.min(img_arr)))
#显示图片
image.show()# 我可以把array里面的值给改了,然后重新显示,这样就可以重新显示图片了# 怎么按条件进去呢aa = np.zeros((512,512))
aa[:100,:200]=1
mask = aa>0img_arr[mask,:] = [255,0,0] ## 注意numpy array是可以一次性赋值的,不需要一个个赋值pil_img = Image.fromarray(img_arr)
print(pil_img.mode)
# RGB
pil_img.save('./AAAA.jpg')

在这里插入图片描述
这里我用另外一个逻辑矩阵去选元素,也是可以的,这个也很方便

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

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

相关文章

指针专题(4)【qsort函数的概念和使用】

1.前言 上节我们学习了指针的相关内容,本节我们在有指针的基础的条件下学习一下指针的运用,那么废话不多说,我们正式进入今天的学习 2.回调函数 我们既然已经学习了指针的相关基础,那么我们此时就可以用指针来实现回调函数 而回…

Linux学习之HTTP

引言:了解到了协议的定制,我们就知道在进行客户端与服务端通信时,对于报文的封装协议的定制是必不可少的,虽说协议是我们自己定制,但是有大佬们直接为我们写了一套完整的,可靠的协议,例如http协…

Python | Leetcode Python题解之第32题最长有效括号

题目: 题解: class Solution:def longestValidParentheses(self, s: str) -> int:stack[]maxL0nlen(s)tmp[0]*n #标记数组cur0for i in range(n):if s[i](:stack.append(i)else:if stack:jstack.pop()if s[j](:tmp[i],tmp[j]1,1 #匹配成…

cookie-editor 管理您的 cookie

Cookie-Editor - 适用于 Chrome、Firefox、Safari、Edge 和 Opera 的安全 cookie 编辑器https://cookie-editor.com/ Cookie-Editor 是一个专注于生产力的浏览器扩展,可帮助您以尽可能少的点击次数管理您的 cookie。 您最多只需点击三次,即可访问当前页…

面试梳理(4.15-11:00)

一、TS中any 和 unknown的区别 借鉴于阮一峰笔记 1、any ​ (1)any 类型表示没有任何限制,该类型的变量可以赋予任意类型的值。 ​ (2)变量类型一旦设为any,TypeScript 实际上会关闭这个变量的类型检查。…

龙迅LT8618SXB TTL /BT656/BT601/BT1120桥接到HDMI 1.4,低功耗HDMI1.4发射机

龙迅LT8618SXB描述: LT8618SX是Lontium基于ClearEdgeTM技术的低功耗版本HDMI发射机。它支持24位颜色深度HDMI1.4(高清多媒体接口)规范。它们完全向后兼容Lontium的第一代HDMI发射机LT8618EX。LT8618SX是一款高性能、低功耗的部件&#xff0c…

UART总线详解

UART原理介绍 Universal Asynchronous Receiver/Transmitter (UART) 是一种广泛应用于嵌入式系统、计算机硬件和通信设备中的串行通信接口。它负责将并行数据转换为串行数据进行传输,同时也能将接收到的串行数据转换回并行数据。UART采用异步通信方式,即…

国债逆回购介绍

在券商上开户后,有两种现金管理方式,一种是场内货币基金,一种就是国债逆回购。 什么是国债逆回购?就是有人拿国债作质押,找你借钱,到期还本付息。沪深两市都有自己的国债逆回购。都是1000块整数倍起购。其…

2W 隔离宽范围输入,单输出 DC/DC 电源模块——TP2L-2W 系列

TP2L-2W系列是一款高性能、超小型的电源模块,宽范围2:1输入,输出有稳压和连续短路保护功能,隔离电压为1.5KVDC、3KVDC,工作温度范围为–40℃到85℃。特别适合对输出电压的精度有严格要求的地方,外部遥控功能…

【STM32】嵌入式实验二 GPIO 实验:数码管

实验内容: 编写程序,在数码管上显示自己的学号。 数码管相关电路: PA7对应的应该是段码,上面的图写错了。 注意:选中数码管是低电平选中;并且用74HC595模块驱动输出的段码, 这个模块的学习可以…

shell--for循环

1.带列表for循环 语法格式 for 循环变量 in 列表 do执行语句... done 在上面的语法中,循环变量是每次循环时得到的列表的某一个数据,当循环一次结束后,再获取另一个数,然后再执行 do 里面的语句,依次类推&#xff0…

数学建模国赛,时间怎么安排,每个时间段应该完成什么事情才能确保进度?

目录 2024全国大学生数学建模思路见文末名片 第一天(开赛日) 第二天 第三天 第四天 2024全国大学生数学建模思路见文末名片 在数学建模比赛中,时间节点的进度安排对于确保团队在有限时间内高效率地完成比赛至关重要。精确的时间管理不仅能帮…

字符数组和字符串题

1.字符数组(1-2) 下面的程序段将输出 ▁▁▁C▁▁ 。 char s[10] "abcd"; printf("%d\n", sizeof(s)); A.4 B.5 C.10 D.11 2.字符数组(1-3) 下面的程序段将输出 ▁▁C▁▁▁ 。 char s[] "abcd"; printf("%d\n", strlen(s))…

JAVA基础之垃圾收集器

一 JVM垃圾收集 分代收集思想 当前虚拟机的垃圾收集一般采用分代收集算法,这种算法本身没有创新性,只是根据对象存活周期的不同将内存分为几块。一般将java堆内存分为新生代和老年代,这样我们就可以根据不同年龄到的特点选择不同的垃圾收集…

学之思考试系统环境启动QA

学之思考试系统环境启动Q&A 目录 学之思考试系统环境启动Q&A后台代码启动失败:前台代码启动失败常见解决方式参考资料后台代码启动失败: 后端代码启动不成功,不能够自动导入maven,配置依赖; 使用idea打开到:\xzs-master\xzs-mysql-master\source\xzs这个路径下;…

SQL UNION

在SQL中,UNION 是一个用于合并两个或多个 SELECT 语句结果集的操作符。使用 UNION 时,结果集会去重,只包含唯一的行。如果保留重复的行,可以使用 UNION ALL。 以下是 UNION 的一些关键点: 1. 去重:UNION 默…

ruoyi-cloud-plus添加一个不要认证的公开新页面

文章目录 一、前端1. 组件创建2. src/router/index.ts3. src/permission.ts 二、后端1. 设计思想2. ruoyi-gateway.yml3. 开发Controller 版本RuoYiCloudPlusv2.1.2plus-uiVue3 ts 以新增一个公开的课程搜索页面为例。 一、前端 1. 组件创建 在view目录下创建一个页面的vue…

Java面试题笔记(持续更新)

目录 Java基础 java中的Math.round(-1.5)等于多少? JDK和JRE的区别? 抽象类能被final修饰吗? 如何决定使用TreeMap还是HashMap? 迭代器Iterator是什么? Queue中的poll和remove有什么区别? 为什么要使用克隆&a…

web前端框架设计第五课-计算属性与监听属性

web前端框架设计第五课-计算属性与监听属性 一.预习笔记 1.计算属性 computed split():拆分 reverse():倒序 join():拼接 计算属性与方法,两者效果一致,但是computed 是基于它的依赖缓存,只有相关依赖发生改变时才会重新取值。而使用 met…

Nodejs安装与配置--基于Linux系统--RedHat7.9

nodejs安装从未这么简单 1、nodejs版本设置? curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash - 其他版本如下: * https://rpm.nodesource.com/setup_16.x — Node.js 16 "Gallium" (deprecated) * https://rpm.nodesource.co…