如何做网站关键词优化,商标设计平台,爱获客电销系统,游戏网站的导航条怎么做的opencv-06 使用numpy.array 操作图片像素值 **1#xff0e;二值图像及灰度图像****利用item 读取某一个像素值****利用itemset 修改像素值****彩色图像numpy.arry 像素值操作** numpy.array 提供了 item()和 itemset()函数来访问和修改像素值#xff0c;而且这两个函数都是经… 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 npimgnp.random.randint(10,99,size[5,5],dtypenp.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 npimgnp.random.randint(10,99,size[5,5],dtypenp.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 npimgnp.random.randint(10,99,size[5,5],dtypenp.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 npimgnp.random.randint(10,99,size[2,4,3],dtypenp.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之间的整数。