前言
转换原理
* 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.770code
#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)的问题:
使用memset对数组赋值_memset数组-CSDN博客 这部分代码没有内存泄漏。在函数中,我们只是简单地将一个数组的值复制到另一个数组中,并没有使用动态分配的内存。因此,我们不需要手动释放任何内存。参考
2. rgb转nv12 nv12转rgb_rgba 转nv12 着色器-CSDN博客;
3. 使用C++实现YUV格式图像与RGB格式图像之间相互转换_c++ yuv转rgb优化算法-CSDN博客; 4. C++中memset函数详解_c++ memset-CSDN博客; 5. TUTORIALS REFERENCE ARTICLES FORUM C++ Tutorials Reference Articles Forum Reference C library: < c; 6. std::memset - cppreference.com; 完 标签:int,raw8,memset,char,CSDN,灰度,128,格式 From: https://www.cnblogs.com/happyamyhope/p/17932780.html