import cv2 as cv
"""
1.像素是构成数字图像的基本单位
2.像素的形状是不固定的,通常大多数情况下,像素被认为是方形的,但有时也可能是圆形的或者其他形状的
"""
# 1.表示图中指定的像素
image = cv.imread('./ImgFile/Conan.jpg')
print(image.shape) # 先获取彩色图像的【像素列数,像素行数,通道数】组成的数组
px = image[300, 300] # 坐标(300,300)上的像素
# 2.获取像素的BGR值
print("像素(300,300)上的像素BGR值为:", px) # [253 255 254]
"""
说明:
图像中该像素点(300,300)的RGB值为(254,255,253),
会发现,这两个结果中的数值是相同的,但顺序是相反的。
原因是OpenCV对图像的通道顺序进行了转换,
即把RGB图像的通道顺序由【R->G->B】转换为BGR图像的通道顺序【B->G->R】
RGB图像是指用RGB色彩空间显示的图像,通道顺序为【R->G->B】
BGR图像是指用BGR色彩空间显示的图像,通道顺序为【B->G->R】
"""
# 3.获取像素px的BGR值有如下两种方式
# 方式一:同时获取坐标像素的B通道、G通道、R通道
image_1 = cv.imread('./ImgFile/Conan.jpg')
px = image_1[250, 250]
print("方式一:\n坐标[250,250]上的像素:", px)
# 方式二:分别获取坐标像素的B通道、G通道、R通道
image_2 = cv.imread('./ImgFile/Conan.jpg')
blue = image_2[250, 250, 0]
green = image_2[250, 250, 1]
red = image_2[250, 250, 2]
print("方式二:\n坐标[250,250]上的像素为:", blue, green, red)
# 4.修改像素的BGR值
image_3 = cv.imread('./ImgFile/Conan.jpg')
px = image_3[100, 100]
print('坐标[100,100]上像素的初始BGR值为:', px)
px = [255, 255, 255]
print('坐标[100,100]上像素修改后的BGR值为:', px)
"""
注意:
对于BGR/RGB图像,当每个像素的R、G、B这3个数值相等时,就可以得到灰度图像。
其中,R=G=B=0(B=G=R=0)为纯黑色,R=G=B=255(R=G=B=0)为纯白色
"""
# 5.修改图中指定区域内的所有像素
# 例如修改Conan.jpg中坐标(540,10),(590,10),(540,60),(590,60)这四个点所围成的区域内所有像素修改为纯白色
image_4 = cv.imread('./ImgFile/Conan.jpg')
cv.imshow('Conan', image_4)
for i in range(540, 591): # i表示横坐标,在区间[540,621]内取值
for j in range(10, 61): # j表示纵坐标,在区间[]
image_4[i, j] = [255, 255, 255]
cv.imshow('changeConan', image_4)
cv.waitKey()
cv.destroyAllWindows()