2.1 像素的读取和修改

一、通过下标的方式对图像像素进行读取与修改

二、利用Numpy库的方式对图像像素的读取与修改

 

 

 

一、通过下标的方式对图像像素进行读取与修改

 

(1)灰度图像像素的读取与修改

print(image[100,100])         #访问图像image的第100行第100列的像素。【例1】

image[100,100]=255          #修改图像image的第100行第100列的像素。【例1】

 

(2)彩色图像像素的读取与修改

print(image[100,100])       #读取第100行100列像素点的值。[ 78  68 178]。结果有三个值,因为是BGR三通道的图像。【例2】

print(image[100,100,0])    #78.读取第100行100列像素点的,B通道的值。【例2】

image[100,100] = [255,255,255]       #修改第100行100列像素点的值。【例2】

image[100,100,2] = 0                        #修改第100行100列像素点的,R通道的值。【例2】

image[50:100,50:100] =[255,0,0]      #修改一个区域为绿色。【例2】

 

 

例1:

'''
灰度图像像素读取和修改
'''

import cv2
image = cv2.imread("image\\lena256.bmp", cv2.IMREAD_UNCHANGED)

 

p = image[100, 100]        #读取像素的值
print(p)                             #73


image[100,100] = 255     #修改像素的值
print(p)                             #73。p还是73.
p = image[100,100]
print(p)                             #255

 

例2:

'''
彩色图像像素读取和修改
'''

import cv2
image = cv2.imread("image\\lenacolor.png", cv2.IMREAD_UNCHANGED)

 

#1:读取一个像素点的值
print(image[100,100])     #读取第100行100列像素点的值。[ 78  68 178]。结果有三个值,因为是BGR三通道的图像。

 

#2:读取一个像素点某个通道的值
b = image[100,100,0]      #78.读取第100行100列像素点的,B通道的值。
print(b)

g = image[100,100,1]      #68.读取第100行100列像素点的,G通道的值。
print(g)

r = image[100,100,2]      #178.读取第100行100列像素点的,R通道的值。
print(r)

 

#3:修改一个像素点的值
image[100,100] = [255,255,255]  #修改第100行100列像素点的值。
print(image[100,100,2])         #255.读取第100行100列像素点的,R通道的值。

 

#4.修改一个像素点某个通道的值
image[100,100,2] = 0            #修改第100行100列像素点的,R通道的值。
print(image[100,100])           #[255 255   0]

 

#5.修改很多个像素点的值
image[50:100,50:100] =[255,0,0]  #修改一个区域为绿色


cv2.imshow("result",image)
cv2.waitKey()
cv2.destroyAllWindows()

结果:

2.1 像素的读取和修改

 

 

 

二、利用Numpy库的方式对图像像素的读取与修改

numpy.array提供了item()和itemset()函数来访问和修改像素值。比直接使用索引要快得多。

 

 

(1)灰度图像像素的读取与修改

print(image.item(100,100))         #访问第100行100列的像素值。【例1】

image.itemset((100,100),255)     #把第100行100列像素点设成255。【例1】

 

(2)彩色图像像素的读取与修改

print(image.item(100,100,0)     #输出image第100行100列的第0个通道的值。【例2】。注意必须要指定通道值,不能写image(100,100)

image.itemset((100,100,0),255)  #把第100行100列的像素的0通道的值改为255。【例2】

 

 

 

 

例1:

'''
灰度图像像素读取和修改(使用Numpy库)
'''

import cv2
import numpy as np

 

image = cv2.imread("image\\lena256.bmp",cv2.IMREAD_UNCHANGED)


print(image.item(100,100))        #73.读取第100行100列的像素值


image.itemset((100,100),255)      #把第100行100列像素点设成255。
print(image.item(100,100))        #255.

 

例2:

'''
彩色图像像素读取和修改(使用Numpy库)
'''

import cv2
import numpy as np

 

image = cv2.imread("image\\lenacolor.png",cv2.IMREAD_UNCHANGED)

 


#print(image.item(100,100))    #这样写是错误的。
print(image.item(100,100,0))   #78.输出image第100行100列的第0个通道的值
image.itemset((100,100,0),255)
print(image.item(100,100,0))   #255.