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

这篇具有很好参考价值的文章主要介绍了opencv-06 使用numpy.array 操作图片像素值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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] 有比较好的图感效果,帮助理解三维数组中这几个数字的含义
opencv-06 使用numpy.array 操作图片像素值,opencv,opencv,numpy,人工智能

运行结果:

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之间的整数。文章来源地址https://www.toymoban.com/news/detail-572517.html

到了这里,关于opencv-06 使用numpy.array 操作图片像素值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2023-06-16 Android app 使用opencv 调用jni在图片上添加文字,对图片进行模糊处理,源码实例学习。

    一、要理解还是得自己看代码        1.1 完整的测试代码路径如下 https://download.csdn.net/download/qq_37858386/87916944        1.2 代码架构         1.3 app 运行效果 二、android studio 添加 opencv module可以参考下面的文章,比较详细。 Android + OpenCV 入门教程笔记(保姆级)_opencv android_派

    2024年02月09日
    浏览(53)
  • opencv基础53-图像轮廓06-判断像素点与轮廓的关系(轮廓内,轮廓上,轮廓外)cv2.pointPolygonTest()

    在 OpenCV 中,函数 cv2.pointPolygonTest()被用来计算点到多边形(轮廓)的最短距离(也 就是垂线距离),这个计算过程又称点和多边形的关系测试。该函数的语法格式为: retval = cv2.pointPolygonTest( contour, pt, measureDist ) 式中的返回值为 retval,与参数 measureDist 的值有关。 式中的参数

    2024年02月13日
    浏览(29)
  • OpenCV实战(4)——像素操作

    2023年05月20日
    浏览(22)
  • Opencv | 基于像素的基础操作 & 逻辑运算

    感谢阅读🌼 如果喜欢这篇文章,记得点赞👍和转发🔄哦! 有任何想法或问题,欢迎留言交流💬,我们下次见! 本文相关代码存放位置     【 Opencv基于像素值的计算 】     【 Opencv 基于像素值的逻辑运算 】 祝愉快🌟!

    2024年04月12日
    浏览(23)
  • opencv 05 彩色RGB像素值操作

    RGB 模式的彩色图像在读入 OpenCV 内进行处理时,会按照行方向依次读取该 RGB 图像的 B 通道、G 通道、R 通道的像素点,并将像素点以行为单位存储在 ndarray 的列中。例如, 有一幅大小为 R 行×C 列的原始 RGB 图像,其在 OpenCV 内以 BGR 模式的三维数组形式存储, 如图 2-7 所示 可

    2024年02月16日
    浏览(30)
  • python numpy opencv调整图片亮度对比度饱和度

    (想要完整代码直接划到最后) 原理比较简单,本质上是对图像各个通道的每个像素点做线性变换,对超出范围[0,255]的做截断处理,所以使用numpy处理比较方便 一下函数为了

    2024年02月12日
    浏览(30)
  • Opencv C++ 三、通过鼠标点击操作获取图像的像素坐标和像素值 四、生成一个简单的灰度图像。

    该操作首先需要创建一个头文件 在该头文件内进行编写: 而后双击打开源文件: 在源文件内编写: 执行该程序: 显示内容为上图,而后在右侧image窗口内任意点击一个位置: 就会显示该位置的坐标信息和像素值。 由于该图像为RBG彩色图像,不是单通道的灰度影像,不能显

    2024年04月28日
    浏览(28)
  • 人工智能(8):Numpy的使用

    1 Numpy介绍 Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组。 Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。 Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。

    2024年02月07日
    浏览(34)
  • OpenCV学习(五)——图像基本操作(访问图像像素值、图像属性、感兴趣区域ROI和图像边框)

    访问像素值并修改 访问图像属性 设置感兴趣区域(ROI) 分割和合并图像 5.1 访问像素值并修改 访问像素值 修改像素值 简单访问每个像素值并修改比较缓慢,一般不使用。 Numpy数组方法 array.item() 和 array.itemset() 被认为更好,但是它们始终返回标量。 更好的像素访问和编辑方

    2024年02月06日
    浏览(36)
  • vscode和像素大厨使用图片时遇到的问题

    1、截屏出来的图片放到像素大厨量时发现量出来的像素太大 解决方法一: 设置设计图为2x,这样能把误差降低很多,但跟实际大小还是差了一些,可以自己在微调。如下图所示 解决方法二: 右键图片选择编辑或用画图工具打开,里面设置重新调整大小,调整为你截屏的那个

    2024年02月10日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包