求RGB文件三通道分量的熵

本文介绍了如何使用Python和OpenCV库读取RGB图像,计算每个通道(红绿蓝)的像素值概率分布,并计算单个像素和通道的熵,以评估颜色信息的复杂度。通过实例展示了如何计算单个像素熵并绘制不同通道的熵变化图。
摘要由CSDN通过智能技术生成

求RGB文件三通道分量的熵

使用python语言,1、画图较方便 2、矩阵运算较方便

显示图像

import cv2

#读取RGB图像
image_path="C:\\Users\\86183\\Desktop\\大三下\\test.rgb"
f=open(image_path,"rb")
data=f.read()
f.close()
data=[int(x) for x in data]
#注意存储为BGR格式,读取为256,256
data=np.array(data).reshape((256,256,3)).astype(np.uint8)
cv2.imshow("data",data)
cv2.waitKey()

注意使用命令行pip install opencv-python 再直接调用cv2库,才可显示图像。原cv库无imshow函数

在这里插入图片描述
)]

计算单个像素值熵

#计算熵
#输入为0-255像素值的概率分布,输出为每一种像素值的信息熵序列。
def single_entropy(P):
    e=np.zeros((256,1))
    #由于如果P存在0时,np.log(P)计算报错,将原序列中的0去除
    i_nzero=np.nonzero(P)
    P=P[i_nzero]
    e1=-(P*(np.log(P)))/np.log(2)
    #将数组中原数组非0部分的计算值填充
    e[i_nzero[0],0]=e1
    return e

计算通道分量熵

def sum_entropy(single_e):
    e=np.sum(single_e)
    return e

在这里插入图片描述

主要函数

#读取RGB图像
image_path="C:\\Users\\86183\\Desktop\\大三下\\test.rgb"
f=open(image_path,"rb")
data=f.read()
f.close()
data=[int(x) for x in data]
#注意存储为BGR格式,读取为256*256
data=np.array(data).reshape((256*256,3)).astype(np.uint8)
cv2.imshow("data",data)
cv2.waitKey()
B=data[:,0]
G=data[:,1]
R=data[:,2]
n_B=np.zeros((256,1))
n_G=np.zeros((256,1))
n_R=np.zeros((256,1))
for i in range(256*256):
    n_B[B[i]]+=1;
    n_G[G[i]]+=1;
    n_R[R[i]]+=1;

P_B=n_B/(256*256)
P_G=n_G/(256*256)
P_R=n_R/(256*256)

single_b_e=single_entropy(P_B)
single_g_e=single_entropy(P_G)
single_r_e=single_entropy(P_R)

sum_b_e=sum_entropy(single_b_e)

plt.plot(single_b_e,'b')
plt.plot(single_g_e,'g')
plt.plot(single_r_e,'r')

plt.show()
(single_b_e,'b')
plt.plot(single_g_e,'g')
plt.plot(single_r_e,'r')

plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值