ffmpeg(1)-图片相关知识

图片相关知识

  • [1 图片格式](#1 图片格式)
    • [1.1 RGB(红、绿、蓝)](#1.1 RGB(红、绿、蓝))
    • [1.2 RGBA(红、绿、蓝、透明度)](#1.2 RGBA(红、绿、蓝、透明度))
    • [1.3 CMYK(青、品红、黄、黑)](#1.3 CMYK(青、品红、黄、黑))
    • [1.4 灰度(Grayscale)](#1.4 灰度(Grayscale))
    • [1.5 二值图像(Binary/Bitmap)](#1.5 二值图像(Binary/Bitmap))
    • [1.6 YUV(亮度与色度分离)](#1.6 YUV(亮度与色度分离))
    • [1.7.索引颜色(Indexed Color)](#1.7.索引颜色(Indexed Color))
    • [1.8 高位深度格式](#1.8 高位深度格式)
  • [2 PSNR 的核心原理](#2 PSNR 的核心原理)
    • [2.1 信号与噪声的定义:](#2.1 信号与噪声的定义:)
    • [2.2 数学公式:](#2.2 数学公式:)
    • [2.3 物理意义:](#2.3 物理意义:)
  • [3 代码使用](#3 代码使用)
    • [3.1 源码](#3.1 源码)
    • [3.2 功能](#3.2 功能)

1 图片格式

1.1 RGB(红、绿、蓝)

描述:通过红(R)、绿(G)、蓝(B)三个颜色通道组合表示颜色,是最常见的屏幕显示格式。

位数:通常每个通道占8位(0-255),共24位(如RGB24),可表示约1677万种颜色。

变体

RGB565:16位格式(R占5位,G占6位,B占5位),用于低带宽场景。

RGB888:24位标准格式(每个通道8位)。

RGBX:类似RGB,但包含一个未使用的填充字节(例如32位存储中的空位)。

应用场景:显示器、摄像头、网页图像(如JPEG、PNG)。

常见格式:JPEG、BMP、PNG(支持RGB)。

排列方式

rgb rgb rgb rgb

rgb rgb rgb rgb ;
rgb三个是连续的,每个分量占一个字节,也就是说每个像素是3个字节

1.2 RGBA(红、绿、蓝、透明度)

描述:在RGB基础上增加Alpha通道(A),表示透明度(0为完全透明,255为不透明)。

位数:32位(每个通道8位)。

应用场景:需要透明或半透明效果的图像(如UI图标、网页设计)。

常见格式:PNG、WebP、TIFF。

1.3 CMYK(青、品红、黄、黑)

描述:通过减法混色原理表示颜色,用于印刷领域。

位数:通常每个通道占8位,共32位。

特点:与RGB不同,CMYK颜色范围更小,不适合直接用于屏幕显示。

应用场景:印刷品(如海报、书籍)、专业设计软件(如Photoshop)。

常见格式:PDF、TIFF。

1.4 灰度(Grayscale)

描述:仅用单通道表示亮度,从黑到白(0为黑,255为白)。

位数 :通常8位(256级灰度),也有更高位深(如12/16位)。
文件格式支持

PNG:支持 8/16 位灰度,支持无损压缩。

JPEG:支持 8 位灰度,有损压缩。

TIFF:支持 8/16/32 位灰度,支持无损压缩。

PGM(Portable Gray Map):专为灰度设计的简单格式。

Grayscale8是一个像素8位占一个字节(0-255,值越大越亮),Grayscale16是一个像素占16位占2个字节,Grayscale12是每个像素1.5个字节(内存不对齐)

1.5 二值图像(Binary/Bitmap)

描述:每个像素仅1位(0或1),表示纯黑或纯白。

应用场景:文字扫描(OCR)、简单图标、传真。

常见格式:TIFF(支持1位深度)、BMP。

1.6 YUV(亮度与色度分离)

描述:将亮度(Y)和色度(U/V)分离,广泛用于视频压缩。

变体

YUV420:色度通道采样率降低(节省带宽),用于H.264/HEVC视频编码。每个像素1.5个字节

YUV444:全色度采样,质量更高。每个像素3个字节

应用场景:视频流(如MPEG、H.265)、电视信号(NTSC/PAL)。

常见格式:视频文件(MP4、AVI)、摄像头原始数据。

排列方式如果是yuv420p,前面wh是Y,紧跟着后面的(w/2)(h/2)是u,紧跟着的是(w/2)*(h/2)是v.

Y(亮度)

在广播标准(如 ITU-R BT.601)中,Y 的取值范围是 16 到 235,而不是 0 到 255。

Y = 16 表示黑色,Y = 235 表示白色。

这种范围设计是为了避免信号过载或欠载,预留了"头尾"空间。

U 和 V(色度 ):
U 和 V 的取值范围是 16 到 240 ,但它们的中心点是 128。

当 U = 128 和 V = 128 时,表示无色差(灰色)。[-128,128]

U 和 V 偏离 128 时,分别表示蓝色和红色的色度偏移。

1.7.索引颜色(Indexed Color)

描述:使用调色板(Palette)存储有限颜色,每个像素保存调色板索引值。

位数:通常8位(最多256色),也可更少(如4位16色)。

应用场景:低颜色复杂度的图像(如卡通、老式游戏)。

常见格式:GIF、PNG(支持索引颜色)。

1.8 高位深度格式

描述:每个通道使用更多位数存储,提升颜色精度。

变体

16位/通道:如RGB48(16位x3通道),用于专业摄影和医学成像。

浮点格式:如RGB32F(32位浮点数/通道),用于HDR(高动态范围)图像。

应用场景:HDR渲染、科学成像(如天文摄影)、电影后期制作。

常见格式:EXR、TIFF、RAW。

2 PSNR 的核心原理

2.1 信号与噪声的定义:

信号 :原始图像或视频的像素值。
噪声:处理后信号与原始信号之间的差异(即失真)。

2.2 数学公式:

2.3 物理意义:

PSNR 值越高,表示处理后的信号质量越好(失真越小)。

典型范围:

bash 复制代码
>30 dB:质量较好(人眼难以察觉明显失真)。
20~30 dB:质量一般(可见失真但可接受)。
<20 dB:质量较差(明显失真)。

PSNR 的替代方法

SSIM(结构相似性):考虑亮度、对比度、结构相似性,更贴近人眼感知。

VMAF(Netflix 视频多方法评估融合):结合多种指标,适用于流媒体质量评估。

无参考指标(如 NIQE、BRISQUE):无需原始信号,直接评估处理后的质量。

3 代码使用

3.1 源码

电梯:源码

白嫖:https://gitee.com/mqinglang/qtopen-source

3.2 功能

以下功能是使用QT实现的:

  • rgb/yuv/r/g/b等格式文件或数据,qt没法直接加载和现实,需要转换成rgb格式数据使用QImage进行包装和现实。
  1. 显示纯原始数据图像(RGB,yuv420p)或者jpg等常见的格式
  2. rgb24分离r/g/b
  3. yuvp420 分割 yuv
  4. yuvp420转RGB24
  5. rgb24转yuvp420
  6. yuv420p转灰度
  7. yuv420亮度减半
  8. PSNR-质量评价
  9. 支持直接将文件拖拽到软件上显示

注意:如果是原始数据比如.rgb等,需要在名称上加上分辨率比如img_256x256.rgb。如果没加上需要手动指定分辨率 *

相关推荐
witton4 小时前
MinGW下编译ffmpeg源码时生成compile_commands.json
ffmpeg·json·makefile·mingw·调试·compile_command·remake
用户96715113916727 小时前
从0到1:Rust 如何用 FFmpeg 和 OpenGL 打造硬核视频特效
rust·ffmpeg
小小码农Come on8 小时前
ffmpeg滤镜使用
ffmpeg
喵手1 天前
Java实现视频格式转换的完整指南:从FFmpeg到纯Java方案!
java·开发语言·ffmpeg
钰爱&1 天前
【Qt】ffmpeg编码—存储(H264)
c++·qt·ffmpeg
yunteng5211 天前
音视频(二)ffmpeg编译及推流
ffmpeg·音视频·h264·媒体推流
DogDaoDao1 天前
从零开始:Windows 系统中 PowerShell 配置 FFmpeg 的详细步骤
windows·ffmpeg·音视频·ffplay·powershell·视频直播·ffprobe
邪恶的贝利亚2 天前
学习ffmpeg-从了解开始
学习·ffmpeg
xiao--xin4 天前
使用ProcessBuilder执行FFmpeg命令,进程一直处于阻塞状态,一直没有返回执行结果
java·笔记·ffmpeg·个人开发·缓冲区·进程阻塞