要求
对一幅图的rgb格式文件和yuv格式文件分析三个通道的概率分布,并计算各自的熵。(编程实现)两个文件的分辨率均为256*256,yuv为4:2:0采样空间,存储格式为:rgb文件按每个像素BGR分量依次存放;YUV格式按照全部像素的Y数据块、U数据块和V数据块依次存放。
简介
我们在这里使用python进行编程,用到的库主要是numpy库处理数据,matplotlib库绘制图像,math库计算熵``
实现
首先是打开rgb文件,我试了下用matplotlib好像不太行,然后按照百度上直接用open打开,然后把数据转换为int类型。
# -*- coding:utf-8 -*-
import numpy as np
# 打开rgb文件
f = open('down.rgb', 'rb')
data = f.read()
f.close()
data = [int(x) for x in data] # 把数据转换为int类型
data = np.array(data).reshape(256, 256, 3).astype(np.uint8) # 得到b、g、r三个通道的数据,每个通道包含256*256个像素点
print(data)
得到数据
得到一个三维数组,最里层包含三个数据分别对应每个像素点的b、g、r的值,外面两层即可以看作一个256*256的二维数组。
打开yuv文件
由于是4:2:0格式,我们得先读取前256256个点作为Y的像素点,中间128128个点作为U的像素点ÿ