一、NV16格式

Y分量单独存放,UV分量交错存放(先U后V),2个Y共用1个UV,总长度为W×H×2。通道数为2,平均每个像素占16位,故称NV16格式。

Y Y Y Y
Y Y Y Y
U V U V
U V U V

二、NV16转BGR

static void NV16_2_BGR(const cv::Mat &yuv_image, unsigned char *buffer) {int bgr_image_width = yuv_image.cols;int bgr_image_height = yuv_image.rows / 2;cv::Mat bgr_image = cv::Mat(bgr_image_height, bgr_image_width, CV_8UC3);int length_y = bgr_image_width * bgr_image_height;int length_uv = length_y >> 1;unsigned char *pt_yuv_y = yuv_image.data;unsigned char *pt_yuv_uv = yuv_image.data + length_y;for (int h = 0; h < bgr_image_height; ++h){cv::Vec3b *pt_bgr_image_line = bgr_image.ptr<cv::Vec3b>(h);unsigned char *pt_yuv_y_line = pt_yuv_y + h * bgr_image_width;unsigned char *pt_yuv_uv_line = pt_yuv_uv + h * bgr_image_width;for (int w = 0; w < bgr_image_width; ++w){unsigned char y, u, v;int b, g, r;y = pt_yuv_y_line[w];if (w%2 == 0){u = pt_yuv_uv_line[w];v = pt_yuv_uv_line[w+1];}if (w%2 == 1){u = pt_yuv_uv_line[w-1];v = pt_yuv_uv_line[w];}r = y + ((360 * (v - 128) + 128) >> 8);g = y - (((88 * (u - 128) + 184 * (v - 128)) - 128) >> 8);b = y + ((455 * (u - 128) + 128) >> 8);if (b < 0)b = 0;if (b > 255)b = 255;if (g < 0)g = 0;if (g > 255)g = 255;if (r < 0)r = 0;if (r > 255)r = 255;pt_bgr_image_line[w][0] = b;pt_bgr_image_line[w][1] = g;pt_bgr_image_line[w][2] = r;}}int length = bgr_image_width*bgr_image_height*3;memcpy(buffer, bgr_image.data, length);
}

三、BGR转NV16

static void BGR_2_NV16(const cv::Mat &bgr_image, unsigned char *buffer) {int bgr_image_width = bgr_image.cols;int bgr_image_height = bgr_image.rows;int length_y = bgr_image_width * bgr_image_height;int length_uv = length_y >> 1;unsigned char *pt_yuv_y = buffer;unsigned char *pt_yuv_uv = buffer + length_y;for (int h = 0; h < bgr_image_height; ++h){const cv::Vec3b *pt_bgr_image_line = bgr_image.ptr<cv::Vec3b>(h);unsigned char *pt_yuv_y_line = pt_yuv_y + h * bgr_image_width;unsigned char *pt_yuv_uv_line = pt_yuv_uv + h * bgr_image_width;for (int w = 0; w < bgr_image_width; ++w){unsigned char b, g, r;int y, u, v;b = pt_bgr_image_line[w][0];g = pt_bgr_image_line[w][1];r = pt_bgr_image_line[w][2];y = (77 * r + 150 * g + 29 * b + 128) >> 8;if (y < 0)y = 0;if (y > 255)y = 255;pt_yuv_y_line[w] = y;if (w%2 == 0){u = ((-44 * r - 87 * g + 131 * b + 128) >> 8) + 128;v = ((131 * r - 110 * g - 21 * b + 128) >> 8) + 128;if (u < 0)u = 0;if (u > 255)u = 255;if (v < 0)v = 0;if (v > 255)v = 255;pt_yuv_uv_line[w] = u;pt_yuv_uv_line[w+1] = v;}}}
}

YUV格式详解参见:YUV 格式详解,只看这一篇就够了(转)

NV16和BGR相互转换C++实现相关推荐

  1. 3、TensorFlow 的数据模型-----张量(Tensor)

    一.Tensor 类简介 Tensor 定义 A Tensor is a symbolic handle to one of the outputs of an Operation. It does ...

  2. 【超直白讲解opencv RGB与BGR】RGB模式与BGR模式有什么不同,如何相互转换?

    一.为什么会有BGR和RGB两种通道? 首先RGB与BGR本质都没有什么区别,OpenCV和PIL读取图片的格式分别是BGR和RGB. 当我们使用OpenCV读取图像时,你应该也会发现读取的数组其实是 ...

  3. bgr与rgb相互转换

    在opencv中的图像是以bgr形式存放的,但很多场景默认的是rgb形式的图像,这就导致实际应用中的颜色错乱,以下是bgr和rgb相互转换的函数: def rgb_bgr(r_color):r_col ...

  4. 使用C++实现YUV格式图像与RGB格式图像之间相互转换

    使用C++实现YUV格式图像与RGB格式图像之间相互转换 一.RGB与YUV转换公式 1.RGB转YUV 1)RGB转换亮度与色差信号公试: 2)归一化为YUV的转化公试为: 2.YUV转RGB 二. ...

  5. YUV格式学习:YUV422P、YV16、NV16、NV61格式转换成RGB24

    对于YUV422的格式,网上有一大堆资料,这里就不说了.直奔主题,给出如何转换的函数,一如既往,只用代码说事. YUV422有打包格式(Packed),一如前文所述.同时还有平面格式(Planar), ...

  6. python image.open函数_PIL.Image.open和cv2.imread的比较与相互转换的方法

    摘要 PIL.Image.open读入的是RGB顺序,而opencv中cv2.imread读入的是BGR通道顺序 .cv2.imread会显示图片更蓝一些. cv2.imread(path,读取方式) ...

  7. Opencv中BGR、YUV、YUV_I420\NV12分析

    文章目录 一.CV_BGR2YUV 二.CV_BGR2YUV_I420 三.I420和NV12的区别以及Opencv中相互转换 四.I420或者NV12转RGB 五.补上demo测试 本地模拟视频解码 ...

  8. bmp格式 8bit与24bit深度相互转换

    bmp格式 8bit与24bit相互转换 一.实验要求 在图像处理软件中生成8bit和24bit深度的BMP文件,编写程序实现不同像素深度文件的相互转换.重点掌握函数定义.缓存区分配.倒序读写.结构体 ...

  9. ROS图像与OpenCV图像相互转换

    参考: https://blog.csdn.net/u013794793/article/details/79925491 使用cv_bridge将ROS图像转换为OpenCV图像,以及OpenCV图 ...

最新文章

  1. RabbitMQ消息手动应答消费者
  2. kali linux学习入门- Chrome浏览器安装,可以正常打开
  3. [Vue.js]实战 -- 电商项目(八)
  4. postgresql表中间加列_PostgreSQL ALTER TABLE命令
  5. 点到曲线的距离公式_推导点到直线的距离公式到底有多少种方法?
  6. 关于python全局变量
  7. 实体与表映射关系XXX.hbm.xml配置详解(转)
  8. YII 学习笔记(2)(未完)
  9. adadelta算法_机器学习中的优化算法(3)-AdaGrad, Adadelta(附Python示例)
  10. zscore标准化步骤_matlab标准化和反标准化——zscore
  11. php mysql orm_初探PHP ORM框架Doctrine
  12. linux加载和卸载驱动模块出现 'XXX': device or resource busy 错误提示
  13. R | 导入excel文件乱码
  14. 2016 上半年 VR 报告:潜在用户4.5亿
  15. QGIS-创建QGIS项目
  16. 人民币升值和贬值的影响
  17. 雷蛇计算机配置似乎是正确的,配置保存需技巧 玩转雷蛇驱动
  18. Oracle内存过度消耗风险提醒
  19. 自由天空GhostXP纯净版v1.1
  20. 分享|GB4943.1-2022标准更新差异测试解读

热门文章

  1. 【论文阅读】Where Did You Learn That From? Surprising Effectiveness of Membership Inference Attacks Agains
  2. 重庆大学计算机学院博士复试分数线,计算机学院2017年博士研究生招生复试录取工作实施细则...
  3. 安全可信 | 首批+先进!天翼全栈混合云一举斩获三项可信云评估
  4. Android 自定义View 手写瀑布流组件FlowLayout
  5. 【贪心算法】最小能量消耗
  6. 关于亚马逊MWS API 看这一篇就够了
  7. 数字签名和验签的详细过程
  8. python气象数据处理与绘图_Python气象数据处理与绘图(15):两种波作用通量计算的python实现及对比(Plumb T-N) (已更正)...
  9. 【Redis】Redis安装、应用场景、数据类型、配置文件(很全)、发布订阅、事务、分布式锁、持久化、主从复制、集群等
  10. lerarning Javascript 犀牛书