numpy.array 提供了 item()和 itemset()函數(shù)來(lái)訪問(wèn)和修改像素值,而且這兩個(gè)函數(shù)都是經(jīng)過(guò)
優(yōu)化處理的,能夠更大幅度地提高處理效率。在訪問(wèn)及修改像素點(diǎn)的值時(shí),利用 numpy.array
提供的函數(shù)比直接使用索引要快得多,同時(shí),這兩個(gè)函數(shù)的可讀性也更好。
1.二值圖像及灰度圖像
可以將二值圖像理解為特殊的灰度圖像,所以這里僅以灰度圖像為例討論像素點(diǎn)值的讀取
和修改。
函數(shù) item()能夠更加高效地訪問(wèn)圖像的像素點(diǎn),該函數(shù)的語(yǔ)法格式為:
item(行,列)
函數(shù) itemset()可以用來(lái)修改像素值,其語(yǔ)法格式為:
itemset(索引值,新值)
為了便于理解,我們首先使用 Numpy 庫(kù)生成一個(gè) 5×5 大小的隨機(jī)數(shù)組,用來(lái)模擬一幅灰度圖像,并對(duì)其進(jìn)行簡(jiǎn)單的處理。
import numpy as np
img=np.random.randint(10,99,size=[5,5],dtype=np.uint8)
print(img)
生成一個(gè)5行5列 10到99 隨機(jī)數(shù)的像素值的矩陣
打印結(jié)果:
[[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 讀取某一個(gè)像素值
示例 item(3.2)
代碼演示:
import numpy as np
img=np.random.randint(10,99,size=[5,5],dtype=np.uint8)
print(img)
print("讀取像素點(diǎn) img.item(3,2)=",img.item(3,2))
打印結(jié)果:
[[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("讀取像素點(diǎn) img.item(3,2)=",img.item(3,2))
img.itemset((3,2),255)
print("修改后 img=\n",img)
print("修改后像素點(diǎn) img.item(3,2)=",img.item(3,2))
打印結(jié)果:
[[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]]
讀取像素點(diǎn) 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]]
修改后像素點(diǎn) img.item(3,2)= 255
通過(guò)觀察輸出結(jié)果可以發(fā)現(xiàn),語(yǔ)句 img.itemset((3,2),255)將圖像第 4 行第 3 列位置上的像素值修改為 255 了
彩色圖像numpy.arry 像素值操作
我們也可以使用函數(shù) item()和函數(shù) itemset()來(lái)訪問(wèn)和修改彩色圖像的像素值,過(guò)程與操作
灰度圖像相似,不同之處在于需要補(bǔ)充通道信息。
函數(shù) item()訪問(wèn) RGB 模式圖像的像素值時(shí),其語(yǔ)法格式為:
item(行,列,通道)
函數(shù) itemset()修改(設(shè)置)RGB 模式圖像的像素值時(shí),其語(yǔ)法格式為:
itemset(三元組索引值,新值)
需要注意,針對(duì) RGB 圖像的訪問(wèn),必須同時(shí)指定行、列以及行列索引(通道),例如
img.item(a,b,c)。僅僅指定行和列是不可以的。
實(shí)操:
使用 Numpy 生成一個(gè)由隨機(jī)數(shù)構(gòu)成的三維數(shù)組,用來(lái)模擬一幅 RGB 色彩空間
的彩色圖像,并使用函數(shù) item()和 itemset()來(lái)訪問(wèn)和修改它
import numpy as np
img=np.random.randint(10,99,size=[2,4,3],dtype=np.uint8)
print("img=\n",img)
print("讀取像素點(diǎn) img[1,2,0]=",img.item(1,2,0))
print("讀取像素點(diǎn) img[0,2,1]=",img.item(0,2,1))
print("讀取像素點(diǎn) 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("修改后像素點(diǎn) img[1,2,0]=",img.item(1,2,0))
print("修改后像素點(diǎn) img[0,2,1]=",img.item(0,2,1))
print("修改后像素點(diǎn) img[1,0,2]=",img.item(1,0,2))
這段代碼創(chuàng)建了一個(gè)形狀為(2, 4, 3)的NumPy數(shù)組img,其中包含了隨機(jī)生成的8位無(wú)符號(hào)整數(shù)(uint8)類(lèi)型的數(shù)據(jù)。這個(gè)數(shù)組模擬了一個(gè)彩色圖像,具有2個(gè)高度、4個(gè)寬度和3個(gè)通道(紅、綠、藍(lán))。
使用np.random.randint()函數(shù)生成隨機(jī)整數(shù),指定了整數(shù)范圍為10到99之間。size=[2, 4, 3]參數(shù)定義了數(shù)組的形狀為(2, 4, 3),即2個(gè)高度、4個(gè)寬度和3個(gè)通道
網(wǎng)上看到這個(gè)圖,對(duì) 上述中 size=[2,4,3] 有比較好的圖感效果,幫助理解三維數(shù)組中這幾個(gè)數(shù)字的含義
運(yùn)行結(jié)果:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-572517.html
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]]]
讀取像素點(diǎn) img[1,2,0]= 80
讀取像素點(diǎn) img[0,2,1]= 36
讀取像素點(diǎn) 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]]]
修改后像素點(diǎn) img[1,2,0]= 255
修改后像素點(diǎn) img[0,2,1]= 255
修改后像素點(diǎn) img[1,0,2]= 255
這個(gè)輸出展示了一個(gè)形狀為(2, 4, 3)的NumPy數(shù)組,表示了兩個(gè)2x4的像素塊,每個(gè)像素塊包含3個(gè)通道(紅、綠、藍(lán))。每個(gè)像素值都是隨機(jī)生成的介于10到99之間的整數(shù)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-572517.html
到了這里,關(guān)于opencv-06 使用numpy.array 操作圖片像素值的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!