opencv-06 使用numpy.array 操作图片像素值

news2024/11/25 4:26:59

opencv-06 使用numpy.array 操作图片像素值

    • **1.二值图像及灰度图像**
    • **利用item 读取某一个像素值**
    • **利用itemset 修改像素值**
    • **彩色图像numpy.arry 像素值操作**

numpy.array 提供了 item()和 itemset()函数来访问和修改像素值,而且这两个函数都是经过
优化处理的,能够更大幅度地提高处理效率。在访问及修改像素点的值时,利用 numpy.array
提供的函数比直接使用索引要快得多,同时,这两个函数的可读性也更好。

1.二值图像及灰度图像

可以将二值图像理解为特殊的灰度图像,所以这里仅以灰度图像为例讨论像素点值的读取
和修改。

函数 item()能够更加高效地访问图像的像素点,该函数的语法格式为:
item(行,列)
函数 itemset()可以用来修改像素值,其语法格式为:
itemset(索引值,新值)
为了便于理解,我们首先使用 Numpy 库生成一个 5×5 大小的随机数组,用来模拟一幅灰度图像,并对其进行简单的处理。

import numpy as np


img=np.random.randint(10,99,size=[5,5],dtype=np.uint8)

print(img)

生成一个5行5列 10到99 随机数的像素值的矩阵

打印结果:

[[67 39 26 43 23]
 [61 42 80 91 19]
 [39 80 58 72 62]
 [94 45 73 47 31]
 [97 39 19 92 59]]

利用item 读取某一个像素值

示例 item(3.2)

代码演示:

import numpy as np


img=np.random.randint(10,99,size=[5,5],dtype=np.uint8)

print(img)

print("读取像素点 img.item(3,2)=",img.item(3,2))

打印结果:

[[97 51 42 58 68]
[21 37 70 92 76]
[38 69 53 21 44]
[69 15 24 71 32]
[12 82 96 50 97]]

读取第四行第三列的像素值 img.item(3,2)= 24

利用itemset 修改像素值

img.itemset((3,2),255)

import numpy as np


img=np.random.randint(10,99,size=[5,5],dtype=np.uint8)

print(img)

print("读取像素点 img.item(3,2)=",img.item(3,2))

img.itemset((3,2),255)
print("修改后 img=\n",img)
print("修改后像素点 img.item(3,2)=",img.item(3,2))

打印结果:

[[70 59 31 93 22]
 [16 10 66 68 50]
 [77 60 92 62 30]
 [61 45 93 98 79]
 [66 27 34 60 63]]
读取像素点 img.item(3,2)= 93
修改后 img=
 [[ 70  59  31  93  22]
 [ 16  10  66  68  50]
 [ 77  60  92  62  30]
 [ 61  45 255  98  79]
 [ 66  27  34  60  63]]
修改后像素点 img.item(3,2)= 255

通过观察输出结果可以发现,语句 img.itemset((3,2),255)将图像第 4 行第 3 列位置上的像素值修改为 255 了

彩色图像numpy.arry 像素值操作

我们也可以使用函数 item()和函数 itemset()来访问和修改彩色图像的像素值,过程与操作
灰度图像相似,不同之处在于需要补充通道信息
函数 item()访问 RGB 模式图像的像素值时,其语法格式为:
item(行,列,通道)
函数 itemset()修改(设置)RGB 模式图像的像素值时,其语法格式为:
itemset(三元组索引值,新值)
需要注意,针对 RGB 图像的访问,必须同时指定行、列以及行列索引(通道),例如
img.item(a,b,c)。仅仅指定行和列是不可以的。
实操:
使用 Numpy 生成一个由随机数构成的三维数组,用来模拟一幅 RGB 色彩空间
的彩色图像,并使用函数 item()和 itemset()来访问和修改它

import numpy as np


img=np.random.randint(10,99,size=[2,4,3],dtype=np.uint8)
print("img=\n",img)
print("读取像素点 img[1,2,0]=",img.item(1,2,0))
print("读取像素点 img[0,2,1]=",img.item(0,2,1))
print("读取像素点 img[1,0,2]=",img.item(1,0,2))
img.itemset((1,2,0),255)
img.itemset((0,2,1),255)
img.itemset((1,0,2),255)
print("修改后 img=\n",img)
print("修改后像素点 img[1,2,0]=",img.item(1,2,0))
print("修改后像素点 img[0,2,1]=",img.item(0,2,1))
print("修改后像素点 img[1,0,2]=",img.item(1,0,2))

这段代码创建了一个形状为(2, 4, 3)的NumPy数组img,其中包含了随机生成的8位无符号整数(uint8)类型的数据。这个数组模拟了一个彩色图像,具有2个高度、4个宽度和3个通道(红、绿、蓝)。
使用np.random.randint()函数生成随机整数,指定了整数范围为10到99之间。size=[2, 4, 3]参数定义了数组的形状为(2, 4, 3),即2个高度、4个宽度和3个通道

网上看到这个图,对 上述中 size=[2,4,3] 有比较好的图感效果,帮助理解三维数组中这几个数字的含义
在这里插入图片描述

运行结果:

img=
 [[[98 63 26]
  [49 64 50]
  [62 36 65]
  [75 77 61]]

 [[11 87 47]
  [69 93 27]
  [80 24 35]
  [81 97 73]]]
读取像素点 img[1,2,0]= 80
读取像素点 img[0,2,1]= 36
读取像素点 img[1,0,2]= 47
修改后 img=
 [[[ 98  63  26]
  [ 49  64  50]
  [ 62 255  65]
  [ 75  77  61]]

 [[ 11  87 255]
  [ 69  93  27]
  [255  24  35]
  [ 81  97  73]]]
修改后像素点 img[1,2,0]= 255
修改后像素点 img[0,2,1]= 255
修改后像素点 img[1,0,2]= 255

这个输出展示了一个形状为(2, 4, 3)的NumPy数组,表示了两个2x4的像素块,每个像素块包含3个通道(红、绿、蓝)。每个像素值都是随机生成的介于10到99之间的整数。

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

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

相关文章

与时代并进,轻创时代愿做“Ai数字人产业的导向标”

近年来,随着人工智能技术的飞速发展,越来越多的企业开始关注并寻求AI数字人的解决方案,以提升业务效率和创造竞争优势。在这个激烈竞争的市场中,轻创时代作为行业黑马出现在人们视野中,以卓越的创新能力立志成为中小型…

【剑指offer】19. 链表中倒数最后k个结点(java)

文章目录 链表中倒数最后k个结点描述示例1示例2思路完整代码 链表中倒数最后k个结点 描述 输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。 如果该链表长度小于k,请返回一个长度为 0 的链表。 数据范围&a…

【软件测试】在Windows环境安装Docker(详细步骤)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 下载和安装 1、地…

免费内网穿透方案twingate搭建,适用pve,exsi等虚拟机访问场景

最近学习devops环境搭建,其中需要安装很多中间件和虚拟机,之前黑裙和pve都用的zerotier,可以点对点通信,但是机器多了就要一台一台去部署比较费力,而且在使用过程中发现,pve的容器和pve宿主机的出口IP是一样的&#xf…

聊聊微服务 架构思想

用了好多年微服务架构了,我经常会反思,这个项目为啥用微服务?真的能帮我们解决一些痛点吗?这个项目有必要用微服务吗?这个项目体现出微服务的价值了吗? 我是从2017年开始入手微服务,距今已经五六…

从小白到大神之路之学习运维第59天--------inotify+rsync同步和实时同步(单台同步和多台同步)

第三阶段基础 时 间:2023年7月13日 参加人:全班人员 内 容: inotifyrsync同步和实时同步 目录 一、rsync远程同步 二、源端到发起端同步 安装部署: 源端(服务端): (单台…

ROS安装注意事项

输入roscore报错:"roscore" not found 输入 sudo apt install ros-​melodi​c-roslaunch​

概率论的学习和整理17:EXCEL里直接对应的分布公式计算概率

1EXCEL计算这些特殊分布的方差 1.1 用原始的概率,期望和方差的方法 虽然计算概率,需要用对应分布的公式P(xn) 想了解的随机变量是总次数n,需要对应几何分布,负二项分布P(xk) 想了解的随机变量是成功次数k,需要对应超几…

【Spring】注解读取和存储Bean对象(下)

三、Spring 获取 bean 对象 获取 bean 对象也叫 “对象装配”,“对象注入”, 意思就是把对象取出来放到某个类中。 对象装配(对象注入)的实现有以下三种方法: 1. 属性注入 2. 构造方法注入 3. Setter 注入 接下来…

【Unity面试篇】Unity 面试题总结甄选 |Unity进阶篇 | ❤️持续更新❤️

前言 关于Unity面试题相关的所有知识点:🐱‍🏍2023年Unity面试题大全,共十万字面试题总结【收藏一篇足够面试,持续更新】为了方便大家可以重点复习某个模块,所以将各方面的知识点进行了拆分并更新整理了新…

总结926

总结:今晚状态极佳,回去路上差点被宿管阿姨锁在楼下。之前每每学到晚上脑子都转不动了,不过今晚就像是适应了一样。这也说明,学习,是可以上瘾的。只要循序渐进,步步为营,就不断收获学习的乐趣。…

解决uniapp运行手机基座出现的问题

常见的问题:(往往在更新编辑器版本后会出现以下问题) 问题1.明明已经连接到手机,就是检测不到设备 问题2.同步资源失败,未得到同步资源的授权 解决办法汇总 问题1解决办法: 方法一:进入HBuild…

关系型数据库范式

范式 前置知识第一范式(1NF)第二范式(2NF)第三范式(3NF)BC范式(BCNF)第四范式(4NF)范式化设计和反范式化设计的优缺点? 前置知识 超键(super key)…

mq延时队列使用

一、基本配置 导入依赖 <!--高级消息队列协议amqp--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>application.yml配置 #rabbitmqrabbitmq:host: 192…

02 半同步半反应堆线程池

服务器编程基本框架 主要由I/O单元&#xff0c;逻辑单元和网络存储单元组成&#xff0c;其中每个单元之间通过请求队列进行通信&#xff0c;从而协同完成任务。 其中I/O单元用于处理客户端连接&#xff0c;读写网络数据&#xff1b;逻辑单元用于处理业务逻辑的线程&#xff1b…

ES7~ES13新特性(二)

1 ES7新增特性解析 2 ES8新增特性解析 3 ES10新增特性解析 4 ES11新增特性解析 5 ES12新增特性解析 6 ES13新增特性解析 ES8-对象相关的属性 ---entries的使用 const obj {name: "why",age: 18,height: 1.88,address: "广州市"}// 1.获取所有的keyco…

【NLP】Transformer模型原理(2)

接上文 【NLP】Transformer模型原理(1) 六、零层的transformer 观看涵盖与本节类似内容的视频:0 层理论 在进入更复杂的模型之前,简要考虑一下“零层”变压器很有用。这样的模型获取一个令牌,嵌入它,解嵌它以生成预测下一个令牌的对数: ​

音频数据分割单独处理后再拼接出现跳跃间断点的处理方法

+hezkz17进数字音频系统研究开发交流答疑 1如图所示 问题1: 对于一个81920字节的音频文件,如果是分割成小块4096输入(无重叠,均分),在频域上做去噪算法,每4k数据返回到时域上再拼接成80k的处理结果文件,发现处理结果有异常有跳跃间断点,像是频谱泄露?分割也需要有重…

mysql函数练习

创建表sch 向表中加入数据 1、创建一个可以统计表格内记录条数的存储函数 &#xff0c;函数名为count_sch() CREATE DEFINERroot% FUNCTION count_sch() RETURNS int(11) BEGINDECLARE total INT DEFAULT 0;#Routine body goes here...SELECT count(1) into total from sch;IN…

Linux->初识计算机网络

目录 前言&#xff1a; 1 网络发展背景 2 协议 2.1 网络协议初识 2.2 协议分层 2.3 OSI、TCP/IP层状模型 2.4 协议和操作系统的关系 2.5 根据协议栈的通信 3 网络中的地址管理 前言&#xff1a; 本篇当中没有任何关于网络编程的讲解&#xff0c;全部是对网络的宏观理解…