图片的总像素计算和像素点统计、像素选取和修改、感兴趣RIO区域提取

本文详细介绍了像素的概念,如何计算黑白和彩色照片的像素数量,包括通过属性查看和使用cv2库的方法。接着,文章对不同类型的图片进行了像素点统计,包括彩色、灰度、纯白、纯黑及随机生成的图片。此外,还讲解了如何选取和修改图像像素,包括ROI区域提取,并给出了相应的代码示例。
Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

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个通道的像素,参考彩色照片像素的选取和修改。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值