使用opencv将sRGB格式的图片转换为BT.2020格式【sRGB】【BT.2020】

将sRGB格式的图片转换为BT.2020格式涉及到两个步骤:首先将sRGB转换到线性RGB,然后将线性RGB转换到BT.2020。这是因为sRGB图像通常使用伽马校正,而BT.2020工作在线性色彩空间中。

  1. 从sRGB到线性RGB:sRGB图像首先需要进行伽马校正解码转换为线性RGB。这个过程通常不是通过一个简单的线性矩阵实现的,而是通过以下公式:

    C_{linear} = \\begin{cases} \\frac{C_{sRGB}}{12.92}, \& \\text{if } C_{sRGB} \\leq 0.04045 \\ \\left(\\frac{C_{sRGB} + 0.055}{1.055}\\right)\^{2.4}, \& \\text{otherwise} \\end{cases}

    其中 (C_{linear}) 是线性RGB中的颜色分量值(红、绿、蓝),(C_{sRGB}) 是sRGB颜色空间中的对应分量值。

  2. 从线性RGB到BT.2020:接下来,您可以应用一个3x3的线性转换矩阵将线性RGB转换为BT.2020色彩空间。这个矩阵通常如下所示:

    [

    \begin{bmatrix}
    R_{BT.2020} \
    G_{BT.2020} \
    B_{BT.2020}
    \end{bmatrix}

    \begin{bmatrix}

    0.6274 & 0.3293 & 0.0433 \

    0.0691 & 0.9195 & 0.0114 \

    0.0164 & 0.0880 & 0.8956

    \end{bmatrix}

    \cdot

    \begin{bmatrix}

    R_{linear} \

    G_{linear} \

    B_{linear}

    \end{bmatrix}

    ]

在实际应用中,你首先需要编写代码将sRGB图像转换为线性RGB,然后再应用上述矩阵进行色彩空间的转换。以下是使用OpenCV在C++中实现这一过程的示例代码:

cpp 复制代码
#include <opencv2/opencv.hpp>
#include <cmath>

cv::Mat sRGBToLinearRGB(const cv::Mat& srgbImage) {
    cv::Mat linearRGB(srgbImage.size(), srgbImage.type());
    srgbImage.forEach<cv::Vec3b>([&](cv::Vec3b &pixel, const int * position) -> void {
        for (int i = 0; i < 3; ++i) {
            float c = pixel[i] / 255.0f;
            c = c <= 0.04045f ? c / 12.92f : std::pow((c + 0.055f) / 1.055f, 2.4f);
            linearRGB.at<cv::Vec3b>(position)[i] = static_cast<uchar>(std::round(c * 255.0f));
        }
    });
    return linearRGB;
}

int main() {
    // 假设你已经有了一个sRGB格式的cv::Mat对象 srgbImage
    cv::Mat srgbImage; // 加载你的sRGB图像

    // 将sRGB转换为线性RGB
    cv::Mat linearRGB = sRGBToLinearRGB(srgbImage);

    // 定义从线性RGB到BT.2020的转换矩阵
    cv::Matx33f transformMatrix(
        0.6274, 0.3293, 0.0433,
        0.0691, 0.9195, 0.0114,
        0.0164, 0.0880, 0.8956
    );

    // 应用转换矩阵
    cv::Mat bt2020Image;
    cv::transform(linearRGB, bt2020Image, transformMatrix);

    // bt2020Image现在包含转换后的图像

    return 0;
}
相关推荐
QYR-分析2 分钟前
高端精密制造赋能,管材旋锻机行业市场格局、痛点趋势与发展研判
人工智能·制造
Hody912 分钟前
【XR硬件介绍】苹果N50智能眼镜技术解读:Vision Pro让位之后,“无屏AI眼镜”凭什么接棒
人工智能·xr
kaixin_啊啊4 分钟前
PandaWiki 本地 AI 知识库实战:文档导入、智能问答与远程访问
linux·服务器·人工智能·windows·ai
海宇数据6 分钟前
零信任架构实战:基于海宇运营商近3个月平均账单构建自动化分布式租赁网关
人工智能·分布式·架构·自动化
2601_967935566 分钟前
PCB制造检测机器视觉系统哪个牌子好?五大品牌能力解析
人工智能·microsoft
Elastic 中国社区官方博客12 分钟前
Elasticsearch:ES|QL 搜索教程
大数据·数据库·人工智能·sql·elasticsearch·搜索引擎·全文检索
程序员柒叔18 分钟前
Dify -- 定时任务系统
人工智能·github·agent·dify·rag
嘉立创FPC苗工20 分钟前
软硬共生:FPC与机器人的双向赋能,解锁智能装备进化新势能
人工智能·机器人·制造·fpc·电路板
MicrosoftReactor22 分钟前
技术速递|解码 AI 新术语:Loops、Harnesses、Squads、Hill Climbing……到底都是什么?
人工智能·agent·harness
shxjnpl23 分钟前
2026年AI会议助手横向对比:6款产品在转写、多人识别与部署上的差异
人工智能·功能测试·语音识别·智能硬件