RGB文件的处理与分析

基础的基础:RGB格式存储的图像文件的像素数据存储结构 其中:R1--R4是第一行像素值的红色分量,R5--R8是第二行,R9--R12是第三行,R13--R16是第四行。R1--R16是所有的像素值的的R分量,所有像素值的G和B分量与R分量类似,紧接着R分量顺序排列,共同组成了像素数据的存储内容。RGB格式存储的图像文件中的像素数据通常是以一种特定的结构来组织的,这种结构确保了每个像素的颜色信息都能被正确地表示和读取。◦ 在这种格式中,每个像素的颜色分量是按该像素的RGB值顺序紧挨着存储的。◦ 在这种格式中,红色、绿色和蓝色通道的数据是分别存储的。 阅读详情

所给rgb文件是按照b,g,r顺序排列的且去掉了包含文件属性的文件头,文件分辨率为256×256256\times256256×256。

该段代码可以实现如下功能:

  • 计算该文件中r、g、b以及转化成的YUV格式中y、u、v的取值的出现概率。
  • 将频率输出为csv表格形式。
  • 输出4:4:4的cif文件
  • 计算r,g,b和y,u,v各分量的熵

由于c++作图不方便,于是图表均为excel完成。

#include <fstream>
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
const char* inPath = "D:\\CLionProjects\\algorithm\\cmake-build-debug-mingw\\down.rgb";
const char* outPath = "D:\\CLionProjects\\algorithm\\cmake-build-debug-mingw\\data.csv";
const char* outFile = "D:\\CLionProjects\\algorithm\\cmake-build-debug-mingw\\data.cif";
//这里建议使用绝对路径
//使用相对路径时需要放到IDE默认的路径或手动设置
int num[6][256], len = 0;
double entropy[6];
vector< unsigned char > YUV[3];
int main()
{
	//打开rgb文件
    ifstream in(inPath, ios::binary);
    if (!in.is_open()) { cout << inPath << " can not be opened!" << endl; return 0; }
    while ( !in.eof())
    {
        unsigned char r, g, b, y, u, v, pos = 0;
        //读入r,g,b的值
        for (auto i : { &b,&g,&r }) *i = in.get();
        //计算Y,U,V分量
        y = ((66 * r + 129 * g + 25 * b + 128) >> 8) + 16;
        u = ((-38 * r - 74 * g + 112 * b + 128) >> 8) + 128;
        v = ((112 * r - 94 * g - 18 * b + 128) >> 8) + 128;
        //统计数值出现次数
        for (auto i : { r,g,b,y,u,v }) num[pos++][i] ++;
        pos = 0; len++;
        //存储Y,U,V的值
        for (auto i : { y,u,v }) YUV[pos++].push_back(i);
    }
    in.close();

	//创建表格
    ofstream out(outPath, ios::binary);
    if (!out.is_open()) { cout << outPath <<" can not be opened!" << endl; return 0; }
    //输出表格内容
    out << "Value,R,G,B,Y,U,V" << endl;
    for (int j = 0; j < 256; ++j)
    {
        out << j << ",";
        for (int i = 0; i < 6; ++i)
        {
            double p = 1.0 * num[i][j] / len;
            out << p << (i == 5 ? "\n" : ",");
            if (p != 0) entropy[i] -= p * log2f(p);
        }
    }
    out << endl << " ,R,G,B,Y,U,V" << endl << "entropy,";
    for (int i = 0; i < 6; ++i) out << entropy[i] << (i == 5 ? "\n" : ",");;
    out.close();

	//创建CIF文件
    out.open(outFile, ios::binary);
    if (!out.is_open()) { cout << outFile << " can not be opened!" << endl; return 0; }
    //输出内容
    for (auto& i : YUV) for (auto j : i) out << j;
    out.close();
}

生成的表格如下:
数值的出现频率
各个分量的熵:
熵
R,G,B和Y,U,V取值的频率图:
RGB
YUV
可见YUV格式中各个分量出现的比较集中。

各个分量的熵:
熵
可见YUV格式各个分量的熵相较于RGB较小,根据香农第一定律可以压缩的比率也更大。

最后用YUV播放器打开cif文件验证一下转化成的YUV文件是否正确:
图片
可以看到和原图一致。

彩色空间转换(RGB与YUV格式文件转换) 一、实验原理 1.本次实验是实现RGB格式和YUV格式的互相转换,这里的YUV其实是指数字高清的YCbCr。 根据亮度和色差计算公式,可以得到: Y=0.2990R+0.5870G+0.1140B R-Y=0.7010R-0.5870G-0.1140B B-Y=-0.2990R-0.5870G+0.8860B  2.为使色差信号的动态范围控制在-0.5~+0.5之间,要对色差信 阅读详情

相关推荐

BMP文件处理

BMP文件处理 文章目录BMP文件处理BITMAP位图文件头 BITMAPFILEHEADER信息头 BITMAPINFOHEADER调色板 RGBQUAD(内容可为空)实际位图信息24位图像对R,G,B三个分量进行分离,产生3幅新的图像具体实现对24彩色图像灰度化改变BITMAPFILEHEADER与BITMAPINFOHEADER添加调色板具体实现对8位灰度图进行反色具体实现 BITMAP位图...

Sc2Player的博客 2009

详解RGB数据格式

目录起源概述RGB的颜色范围常见RGB文件存储类型RGB555RGB1555RGB565RGB24格式RGB32格式其他常用单通道与多通道单通道多通道图像处理优势对比: 起源 RGB三原色起源于上世纪初1809年Thomas Young提出视觉的三原色学说,随后Helmholtz在1824年也提出了三原色学说:即:视网膜存在三种视锥细胞,分别含有对红、绿、蓝三种光线敏感的视色素,当一定波长的光线作用于视网膜时,以一定的比例使三种视锥细胞分别产生不同程度的兴奋,这样的信息传至大脑中枢,就产生某一种颜色的感觉。

路人coder 1万+

将Python图片转换为RGB数组

有时候,我们可能需要将一个图片文件转换为RGB数组,以便对其进行进一步的处理和分析。通过使用这个RGB数组,你可以进行各种图像处理和分析操作,例如图像滤波、特征提取等。首先,我们需要安装Pillow库,它是Python中一个强大的图像处理库。请注意,以上代码假设你的图像是一个常规的RGB图像。如果你的图像是灰度图像或具有其他通道顺序的图像,你需要相应地调整代码。最后,我们打印数组的形状和数据类型,以及数组的值。形状告诉我们图像的尺寸和通道数,数据类型告诉我们数组中元素的数据类型。替换为实际的图像文件路径。

ByteHackerX的博客 1045

.rgb文件是什么格式,为什么会作为工业相机的图像存储格式

嗯,用户问的是“.rgb文件是什么格式,为什么会作为工业相机的图像存储格式”。首先,我需要确定用户所说的.rgb文件具体指什么,因为不同的上下文可能有不同的格式。常见的图像格式如JPEG、PNG、BMP等,但“.rgb”扩展名并不常见于这些标准格式。接下来,用户提到工业相机使用这种格式存储图像,所以需要思考工业应用中的图像存储需求。工业相机通常需要高保真、未压缩的图像数据,以便进行精确的测量和分析。可能的原因包括保留原始数据、快速读写、兼容性等。

keyboard专栏 1596

Delphi中RGB颜色转换的实现与应用

在数字色彩处理的世界里,RGB颜色模型是构成计算机图形色彩的基础。RGB代表红色(Red)、绿色(Green)、蓝色(Blue),通过组合这三种原色的不同强度值来生成其他颜色。在光的加色法原理下,当三种颜色光达到最大强度时,可以混合成白色光。反之,如果没有光,则是黑色。RGB模型广泛应用于显示器、电视以及其他需要显示图像的设备中。RGB模型的每一种颜色通常用一个介于0到255的整数来表示,这对应于8位颜色通道。因此,一种颜色可以用三个这样的数字来表达,例如RGB(255,0,0)代表纯红色。

weixin_35750747的博客 1054

RGB 播放器

工具设置参数,对各种RGB原始帧数据可连续播放

RGB、YUV像素基础知识及处理数据

RGB、YUV像素基础知识及处理数据 目录 RGB YUV RGB、YUV像素数据处理 转载自Gemfield的知乎文章:从YUV到RGB 转载自雷神的博客:视音频数据处理入门:RGB、YUV像素数据处理 1. RGB 1. RGB基本概述 RGB色彩模式是工业界的一种颜色标准,是通过对红®、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是运用最广的颜色系统之一。 通常

努力努力再努力L 1785

photoshop处理rgb格式文件的插件

photoshop处理.rgb格式文件的插件

rgb文件格式的文件读取与转换

rgb文件格式的扩展名为.rgb,可以使用python版的opencv来读取和转换成.jpg的文件,代码如下: import cv2 as cv import numpy as np f = open(r"img.rgb", "rb") data = f.read() f.close() data = [int(x) for x in data] # 图像尺寸是需要预先知道的 data = np.array(data).reshape((720, 720, 3)).astype(np.uint8)

weixin_37889356的博客 2748

YOLO系列训练时出现loss出现nan值或者测试时P\R\map全部为0值的解决办法(GTX16xx系列显卡大坑)

YOLO系列训练时出现loss出现nan值或者测试时P\R\map全部为0值的解决办法(GTX16xx系列显卡大坑)

weixin_55249340的博客 3万+

JasperReport制作行内容合并的表格

效果图: 实现思路一: 交叉表 另一个思路: 普通表格 缺点:无法实现内容 垂直居中显示 准备工作 一、数据准备 DROP TABLE IF EXISTS `address_item_sex_value`; CREATE TABLE `address_item_sex_value` ( `id` int(11) NOT NULL AUTO_INCREM...

weixin_34148456的博客 2468

对rgb和yuv文件分析各通道的概率分布,并求熵

一、实验目的 对down.rgb和down.yuv文件分析三个通道的概率分布,并计算各自的熵。图片分辨率均为256*256,rgb文件中每个像素按BGR分量依次存放,yuv文件为4:2:0采样。 二、实验思路 以对down.rgb文件的分析举例 1.读取文件,可利用fopen函数 2.对各分量进行计数。此处可分配一个动态缓存空间以存储从rgb文件中读取的数据,再定义countB,countG,countR三个数组,分别对B,G,R进行计数,每个数组长度均为256。因为要对B,G,R分别读取、计数,所以动态缓

weixin_45653303的博客 255

app逆向分析案例-95分

先把justtrusmeplus打开设置好95分,开始抓包,得到结果为: https://www.95fenapp.com/api_goods/list/v3.0?is_all=1&keywords=%E7%A7%91%E6%AF%94& page=1&page_size=20 &publish_timestamp=0 &scene=2&scene_type=95fen_android_search_personal&sn=SearchList

weixin_41763171的博客 2742

DICOM医学图像文件下载仓库:助力医学图像研究与分析

DICOM医学图像文件下载仓库:助力医学图像研究与分析 【下载地址】DICOM医学图像文件下载仓库 本开源项目专注于提供多种类型的DICOM医学图像文件,涵盖RGB格式、灰度格式、无压缩及JPEG2000压缩等多种类型,适用于医学图像处理、分析与研究。DICOM作为医学图像传输的标准格式,确保了图像在不同设备间的兼容性与...

gitblog_06751的博客 336

演化计算(蚁群算法、粒子群算法、遗传算法、演化规则......)

演化算法1.概念2.解决的问题 1.概念 传统算法(如梯度下降法、爬山法)根据导数的性质决定迭代的方向;而演化计算是一组解在一起协同作用产生一个最优解。 2.解决的问题 预测优化:演化计算(蚁群算法、粒子群算法、遗传算法等) 解的聚散、多样性:通过多次聚散,尽快得出最优解(某个解不合要求,要能够发散出去) ...

dear_jing的博客 4162

74LS161/48 交通灯控制系统:30-5-20-5 时序逻辑电路 Multisim 仿真验证

本文详细解析了基于74LS161/48芯片的交通灯控制系统设计,通过Multisim仿真验证30-5-20-5时序逻辑电路。从系统架构搭建、状态机实现到波形分析,提供全流程操作指南与典型问题排查方法,助力数字电路课程设计高效完成。

weixin_26742753的博客 380

[数据压缩] rgb文件三通道分量的熵计算及元音的时域频域波形分析

目录 rgb文件三通道分量的熵计算的编程实现 元音的时域频域波形分析基于Audacity rgb文件三通道分量的熵计算的编程实现 元音的时域频域波形分析基于Audacity

lii_by的博客 1927

一款值得关注的开源企业管理ERP系统

盒木ERP是一款开源的现代化企业管理系统,采用前后端分离架构,后端基于Python+Django,前端使用Vue+Ant Design。系统涵盖采购、销售、库存、财务等核心业务模块,支持移动端操作和PDA扫码。具有开源免费、技术先进、功能完善等特点,适合中小企业使用或二次开发。项目提供详细部署指南,支持Docker容器化部署,是学习ERP系统开发和企业数字化转型的优秀选择。

1107

1.2 分析RGB和YUV文件三个通道的概率分布,并计算各自的熵(编程实现)

1.2 分析RGB和YUV文件三个通道的概率分布,并计算各自的熵(编程实现) 一、作业要求 分析down.rgb和down.yuv三个通道的概率分布,并计算各自的熵。 两个文件的分辨率均为256*256。 yuv为4:2:0采样空间。 rgb文件按每个像素BGR分量依次存放;YUV格式按照全部像素的Y数据块、U数据块和V数据块依次存放。 二、分析思路 (一)RGB文件 “rgb文件按每个像素BGR分量依次存放”,即文件中的数据为BGRBGR…… “文件的分辨率均为256256”,即R、G、B分别有25

zsy_cuc_18的博客 364

仿真学习系列(四十三):Sigrity仿真之平面谐振分析

在 SIGRITY 中,平面谐振分析(Plane Resonance Analysis)是一种用于分析信号完整性(SI)问题的高级仿真方法,尤其关注于层间电磁波的传播、谐振现象和信号衰减等问题。平面谐振分析通常用于电源分配网络(PDN)、信号线和参考平面之间的相互作用。本文将详细介绍如何在 SIGRITY 中进行平面谐振分析,并提供一些实用的分析方法与步骤,帮助工程师们识别和优化可能存在的设计问题。

案例文章,高速信号 481

Apple Store 上架过包:iOS审核4.3被拒原因分析与解决修改方案

Apple Store 上架过包:iOS审核4.3被拒原因分析与解决修改方案

专业解决各种上架过包问题,专业团队专业处理 751

假期作业三:读入一个RGB文件,输出该数据文件中RGB三分量的概率分布示意图和熵。

作业内容:读入一个24bitRGB文件(以down.rgb为例,其分辨率为256256),输出该数据文件中R、G、B三个分量(各8bit表示)的概率分布示意图(类似下图)和熵。 提示:(用C或C++实现时),程序的流程为 开辟3个widthheight的unsigned char型数组;打开要读出的RGB文件(以“rb”方式打开),打开3个要输出的数据统计文件(以“w”方式打开,可命名为R_sat...

NTY518的博客 446

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【作业二】分析RGB和YUV文件三个通道的概率分布,并计算各自的熵

一、作业要求 分析down.rgb和down.yuv三个通道的概率分布,并计算各自的熵。 两个文件的分辨率均为256*256。 yuv为4:2:0采样空间。 rgb文件按每个像素BGR分量依次存放;YUV格式按照全部像素的Y数据块、U数据块和V数据块依次存放。 二、分析思路 1.对于rgb文件来说,由于其分辨率为256x256,则其所占字节数为256x256x3,并且其存放格式为{r0g0b0r1g1b1…},又对于yuv文件来说,由于其采样模式为4:2:0,由电视原理所学知识可知fu=fv=0.25f

weixin_47048525的博客 195

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

统计RGB格式和YUV格式的图像文件中各分量概率分布,并计算它们的熵

import numpy as np import math import matplotlib.pyplot as plt file = open("D:\\Users\\AzureShield\\Desktop\\down.rgb","rb") ##获取文件路径。需要注意的是,默认r读取时,Python会将字节\x1a(26)转换成的字符视作文档结束符(EOF), ##故若不用二进制rb读取,可能产生文档读取不全的现象 data = file.read() ##读取图像文件,并按从左至右、从上至

ArchNexus的博客 337

元音音频分析和RGB文件三通道分量的熵计算

音频分析和RGB文件三通道分量的熵计算

xtychfug的博客 126

CIF 文件的读取

任务目标:将CIF视频文件进行红色通道提取。 文章目录(一)C++文件读取(二)CIF文件参考文章 (一)C++文件读取   打开二进制文件用binary方式。   以读取CIF文件为例,以下先不对其进行操作,也不深究CIF文件的存储格式。 (二)CIF文件   CIF文件按照二进制存储,因而对其的读取与操作与对二进制文件的读取及操作一致。 参考文章 [1]使用c++处理YUV文件 [2]C...

CRR的博客 3614
上一篇: C++文件读写
下一篇: 彩色空间转换实验实验报告
Cross_Entropy
博客等级 码龄7年 69粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值