0.本文主要内容:
1.什么是像素
2.如何计算一张照片有多少像素
3.照片的像素点统计
4.照片的像素选取和修改
5.照片的感兴趣RIO区域提取
1.什么是像素
像素:是指在由一个数字序列表示的图像中的一个最小单位,称为像素。
2.如何计算一张照片有多少像素
(1)黑白照片

a.通过照片属性查看像素
其中位深度:8,即照片的类型为uint8

b.通过cv2查看像素
img = cv2.imread(r'C:\Users\Nobody\Desktop\img1.png',0)
w,h=img.shape
size=img.size
print(f'总像素:{size}\n宽:{h},高:{w}')
输出:
总像素:1049088
宽:1366,高:768
通过结果,总像素=宽度像素*高度像素。
(2)彩色照片

a.通过照片属性查看像素
其中位深度:24,即照片的类型为uint8,彩色照片为3通道,B、G、R三张照片的叠加。

b.通过cv2查看像素
img = cv2.imread(r'C:\Users\Nobody\Desktop\img1.png',1)
w,h,channels=img.shape
size=img.size
print(f'总像素:{size}\n宽:{h},高:{w}')
输出:
总像素:3147264
宽:1366,高:768
通过结果,总像素=宽度像素*高度像素*3。
原因是:彩色照片有3个通道,彩色照片的像素等于3个通道的像素之和。
通过程序测试三个通道的像素:
img = cv2.imread(r'C:\Users\Nobody\Desktop\img1.png',1)
img_b,img_g,img_r=cv2.split(img)
print(f'img的像素:{img.size}')
print(f'img_b的像素:{img_b.size}')
print(f'img_g的像素:{img_g.size}')
print(f'img_r的像素:{img_r.size}')
输出:
img的像素:3147264
img_b的像素:1049088
img_g的像素:1049088
img_r的像素:1049088
3.照片像素点统计
照片本质上是一个三维矩阵(h*w*channels)
参考照片:

照片的值如下:

[[[184 200 212]
[176 192 204]
[172 188 200]
...
[129 158 165]
[136 165 172]
[138 167 174]]
[[188 204 216]
[183 199 211]
[180 196 208]
...
[142 171 178]
[140 169 176]
[133 162 169]]
[[184 200 212]
[181 197 209]
[180 196 208]
...
[136 165 172]
[130 159 166]
[121 150 157]]
...
[[242 248 255]
[233 239 246]
[223 229 236]
...
[ 20 34 32]
[ 19 33 31]
[ 22 36 34]]
[[225 232 241]
[222 229 238]
[219 226 235]
...
[ 14 28 26]
[ 10 24 22]
[ 11 25 23]]
[[211 218 227]
[217 224 233]
[225 232 241]
...
[ 20 34 32]
[ 18 32 30]
[ 21 35 33]]]
(1)彩色照片像素点统计
测试代码:
import cv2
import numpy as np
import matplotlib.pyplot as plt
if __name__ == "__main__":
# 读取彩色照片
img = cv2.imread(r'C:\Users\Nobody\Desktop\img1.png',1)
cv2.imshow('img',img)
b,g,r=cv2.split(img)
h,w=b.shape
array=np.zeros([256], dtype = np.int32)
for img_p in [b,g,r]:
for row in range(h):
for col in range(w):
pix_value=img_p[row,col]
array[pix_value]+=1
plt.plot(array,'r')
plt.show()
结果输出:
(2)灰度照片像素点统计
测试代码:
import cv2
import numpy as np
import matplotlib.pyplot as plt
if __name__ == "__main__":
# 读取灰度照片
img = cv2.imread(r'C:\Users\Nobody\Desktop\img1.png',0)
cv2.imshow('img',img)
h,w=img.shape
array=np.zeros([256], dtype = np.int32)
for row in range(h):
for col in range(w):
pix_value=img[row,col]
array[pix_value]+=1
plt.plot(array,'r')
plt.show()
结果输出:

(3)纯白照片像素点统计
测试代码:
import cv2
import numpy as np
import matplotlib.pyplot as plt
if __name__ == "__main__":
# 纯白照片
img = np.zeros([400,400,3],np.uint8)+255
cv2.imshow('img',img)
b,g,r=cv2.split(img)
h,w=b.shape
array=np.zeros([256], dtype = np.int32)
for img_p in [b,g,r]:
for row in range(h):
for col in range(w):
pix_value=img_p[row,col]
array[pix_value]+=1
plt.plot(array,'r')
plt.show()
结果输出:

(4)纯黑照片像素点统计
测试代码:
import cv2
import numpy as np
import matplotlib.pyplot as plt
if __name__ == "__main__":
# 纯白照片
img = np.zeros([400,400,3],np.uint8)
cv2.imshow('img',img)
b,g,r=cv2.split(img)
h,w=b.shape
array=np.zeros([256], dtype = np.int32)
for img_p in [b,g,r]:
for row in range(h):
for col in range(w):
pix_value=img_p[row,col]
array[pix_value]+=1
plt.plot(array,'r')
plt.show()
结果输出:

(5)随机生成的照片像素点统计
测试代码:
import cv2
import numpy as np
import matplotlib.pyplot as plt
if __name__ == "__main__":
# 纯白照片
img = np.random.randint(0,255,(400,400,3),dtype='uint8')
cv2.imshow('img',img)
b,g,r=cv2.split(img)
h,w=b.shape
array=np.zeros([256], dtype = np.int32)
for img_p in [b,g,r]:
for row in range(h):
for col in range(w):
pix_value=img_p[row,col]
array[pix_value]+=1
plt.plot(array,'r')
plt.show()
结果输出:

4.像素选取和修改
(1)彩色照片
照片是一组三维矩阵,而彩色照片channels为3,即第三维的长度为3
通过【h,w】获取出来的像素是3个通道的像素
a.单个像素选取
程序如下:
# 彩色照片
img =cv2.imread(r'C:\Users\Nobody\Desktop\img1.png',1)
pix_b,pix_g,pix_r=img[100,100]
print(f'pix_b:{pix_b}\npix_g:{pix_g}\npix_r:{pix_r}')
输出:
pix_b:223
pix_g:233
pix_r:243
b.单个像素修改
img[100,100]=0
c.某些像素选取(ROI提取)
ROI(region of interest),感兴趣区域。
如下图:RIO区域为花
代码:
img =cv2.imread(r'C:\Users\Nobody\Desktop\img1.png',1)
cv2.imshow('img',img)
img_copy=img.copy()
roi_img=img_copy[195:445,800:1100]
cv2.imshow('roi_img', roi_img)
结果输出:
d.某些像素修改
代码如下:
# 彩色照片
img = cv2.imread(r'C:\Users\Nobody\Desktop\img1.png', 1)
img_copy = img.copy()
roi_img = img_copy[195:445, 800:1100]
img_copy[100:350,200:500]=roi_img
cv2.imshow('new_img',img_copy)
输出:

(2)灰度照片
照片是一组三维矩阵,而灰度照片channels为1,即第三维的长度为1
通过【h,w】获取出来的像素是1个通道的像素,参考彩色照片像素的选取和修改。
本文详细介绍了像素的概念,如何计算黑白和彩色照片的像素数量,包括通过属性查看和使用cv2库的方法。接着,文章对不同类型的图片进行了像素点统计,包括彩色、灰度、纯白、纯黑及随机生成的图片。此外,还讲解了如何选取和修改图像像素,包括ROI区域提取,并给出了相应的代码示例。

6085

被折叠的 条评论
为什么被折叠?



