图片的总像素计算和像素点统计、像素选取和修改、感兴趣RIO区域提取 |
您所在的位置:网站首页 › 图像的像素尺寸 › 图片的总像素计算和像素点统计、像素选取和修改、感兴趣RIO区域提取 |
0.本文主要内容:
1.什么是像素 2.如何计算一张照片有多少像素 3.照片的像素点统计 4.照片的像素选取和修改 5.照片的感兴趣RIO区域提取 1.什么是像素像素:是指在由一个数字序列表示的图像中的一个最小单位,称为像素。 2.如何计算一张照片有多少像素 (1)黑白照片其中位深度:8,即照片的类型为uint8 输出: 总像素:1049088 宽:1366,高:768通过结果,总像素=宽度像素*高度像素。 (2)彩色照片其中位深度:24,即照片的类型为uint8,彩色照片为3通道,B、G、R三张照片的叠加。 输出: 总像素: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) 参考照片: 照片的值如下: 测试代码: 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()结果输出: 测试代码: 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()结果输出: 测试代码: 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()结果输出: 测试代码: 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()结果输出: 测试代码: 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()结果输出: 照片是一组三维矩阵,而彩色照片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)结果输出: 代码如下: # 彩色照片 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)输出: 照片是一组三维矩阵,而灰度照片channels为1,即第三维的长度为1 通过【h,w】获取出来的像素是1个通道的像素,参考彩色照片像素的选取和修改。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |