【图像处理基础】灰度图raw8格式转NV12格式

前言

 

转换原理

* RGB转YUV-NV12:
Y = 0.299 R + 0.587 G + 0.114 B
U = - 0.1687 R - 0.3313 G + 0.5 B + 128
V = 0.5 R - 0.4187 G - 0.0813 B + 128
* YUV-NV12转RGB
R = Y + 1.402 (V - 128)  # 1.4075
G = Y - 0.34414 (U - 128) - 0.71414 (V - 128)
B = Y + 1.772 (U - 128) # 1.770
code
#include <iostream>
#include <string.h>
void raw8ToNv12(unsigned char* raw8data, unsigned char* nv12data){
    int w = 3, h = 4;
    for(int i =0; i< w*h; i++){
        nv12data[i] = raw8data[i];
    }
    memset(nv12data+w*h, 128, w*h/2);
}
int main()
{
    // int w = 3, h = 4;
    unsigned char raw8data[12] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'};
    std::cout << "raw8data: " << raw8data << std::endl;
    unsigned char nv12data[18];
    raw8ToNv12(raw8data, nv12data);
    std::cout << "nv12data: " << nv12data << std::endl; 
}
View Code

使用memset函数对数组赋值不同数据类型(unsigned char/char/int)的问题:

这部分代码没有内存泄漏。在函数中,我们只是简单地将一个数组的值复制到另一个数组中,并没有使用动态分配的内存。因此,我们不需要手动释放任何内存。

参考

1. 图像格式互转_8bit灰度图转yuv-CSDN博客

2. rgb转nv12 nv12转rgb_rgba 转nv12 着色器-CSDN博客

posted on 2024-01-23 11:33  鹅要长大  阅读(32)  评论(0编辑  收藏  举报

导航