使用opencv函数 将JPG图像转存为NV12格式分为两步:

  1. 将BGR格式转为I420;
  2. 将I420格式转为NV12或NV21;

其中,I420、NV12、NV21格式如下:
I422 属于 YUV422P 格式。三个平面,分别存储 Y U V 分量;

NV12 属于 YUV420SP 格式。两个平面,分别存储 Y 分量 和 UV 分量。其中 UV 分量共用一个平面并且以 U, V, U, V 的顺序交错排列。每四个 Y 分量共享一组 UV 分量;

NV21 属于 YUV420SP,与 NV12 几乎一致,区别是 UV 平面中 U 与 V 的排列顺序颠倒,以 V, U, V, U 的顺序交错排列

 Y Y Y Y Y Y      Y Y Y Y Y Y      Y Y Y Y Y YY Y Y Y Y Y      Y Y Y Y Y Y      Y Y Y Y Y YY Y Y Y Y Y      Y Y Y Y Y Y      Y Y Y Y Y YY Y Y Y Y Y      Y Y Y Y Y Y      Y Y Y Y Y YU U U U U U      U V U V U V      V U V U V UV V V V V V      U V U V U V      V U V U V U- I420 -          - NV12 -         - NV21 -

测试用例:

static void ConvertBGR2YUV420SP_NV12(const cv::Mat &bgr_image,unsigned char *buffer) {int bgr_width = bgr_image.cols;int bgr_height = bgr_image.rows;cv::Mat yuv_image;cvtColor(bgr_image, yuv_image, cv::COLOR_BGR2YUV_I420);int len_y = bgr_height * bgr_width;int len_u = len_y >> 2;unsigned char *pt_yuv_y = yuv_image.data;unsigned char *pt_yuv_u = pt_yuv_y + len_y;unsigned char *pt_yuv_v = pt_yuv_u + len_u;unsigned char *pt_dst_uv = buffer + len_y;int i, j;// copy y;memcpy(buffer, pt_yuv_y, len_y);// copy uv;for (i = 0, j = 0; i < len_u; i++) {pt_dst_uv[j++] = pt_yuv_u[i];pt_dst_uv[j++] = pt_yuv_v[i];}
}int main()
{vector<cv::String> files_jpg;glob("D:/data/*.jpg", files_jpg);for (size_t i = 0; i < files_jpg.size(); i++){cv::Mat bgr_mat = cv::imread(files_jpg[i].c_str(), cv::IMREAD_COLOR);int width = bgr_mat.cols;int height = bgr_mat.rows;int yuvNV12_size = width * height * 3 / 2;int rgb24_size = width * height;unsigned char *nv12_buffer = (unsigned char *)malloc(yuvNV12_size*sizeof(uchar));ConvertBGR2YUV420SP_NV12(bgr_mat, nv12_buffer);std::string savePath = files_jpg[i] + "_nv12.yuv";FILE *yuvFd = fopen(savePath.c_str(), "w+");fwrite(nv12_buffer, sizeof(uchar), yuvNV12_size, yuvFd);fclose(yuvFd);free(nv12_buffer);}return 0;
}

JPG图像转存为NV12格式相关推荐

  1. 将4DfMRI图像转存为.npy格式

    将4DfMRI图像转存为.npy格式 一.加载数据 import nibabel as nib import os import numpy as npimg_path = 'E:/python/ni ...

  2. 用python读取pg数据库中的blob类型图片数据,转换存成jpg格式存到本地文件夹

    先啰嗦一下,热热身 在工作中,我们常见到数据库中的数据类型主要为char,varchar,text等,但是有时我们也会用blob格式来存储语音文件或者图像文件,在网上找了很多,都没找到合适的办法,只好 ...

  3. 【nv12 格式转换】不同图像数据格式之间转换代码实操

    文章目录 1 问题先行 2 nv12介绍 2.1 YUV格式 2.2 NV12排布 3 不同数据格式之间转换实操 4 参考链接 1 问题先行 nv12是什么格式?和常见的rgb/bgr有什么关系吗?他 ...

  4. android 将bitmap存为 bmp格式图片大小,把bitmap保存成 BMP的格式 并且位深度为1

    生成图片的要求:图像格式采用单色位图文件格式(BMP)  要求bmp的位深度为1 参考: 代码有点小瑕疵 : bitmap的图片宽度要求是:8的整数倍 /** * 将Bitmap存为 .bmp格式图片 ...

  5. python使用openCV加载图像、并将BGR格式转换成HSV格式、定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)、并使用mask信息进行颜色分离、BGR格式的图像转化为RGB、并可视化

    python使用openCV加载图像.并将BGR格式转换成HSV格式.定义HSV格式中需要分离颜色的掩码(掩模)区间(mask).并使用mask信息进行颜色分离.将BGR格式的图像转化为RGB.可视化 ...

  6. R语言使用magick包的image_write函数将已有图像以任何指定的格式导出保存到磁盘上(例如将原文将从png转化为jpeg)

    R语言使用magick包的image_write函数将已有图像以任何指定的格式导出保存到磁盘上(例如将原文将从png转化为jpeg) 目录

  7. android 将bitmap存为 bmp格式图片大小,Android Bitmap保存為.bmp格式,圖像轉化為黑白圖片...

    /** * 把一個View的對象轉換成bitmap */ static Bitmap getViewBitmap(View v) { v.clearFocus(); v.setPressed(fals ...

  8. 计算机中的 marshal 是什么意思?(列集:将数据从某种格式存为流格式的操作)(序列化)(marshalling、unmarshalling散集)

    今天看dbus框架,看到一个marshal method call to message不知道是什么意思 IPC进程间通信 D-Bus(Desktop Bus)快速入门(以libdbus-glib库为 ...

  9. 基于libyuv库的NV12格式图片的缩放

    网上关于使用libyuv库在Linux下对NV12格式进行缩放的教程是在太少了,对于博主这种菜鸡来说简直就是煎熬,因为本人阅读源码的能力实在很差啊!!!但不管怎么样,把这几天所得写下来,希望对大家有帮 ...

最新文章

  1. 差分霍尔器件测量电路
  2. Windows线程调度学习(一)
  3. Android之用sharedUserId来实现不同应用(APK)数据共享
  4. LSI_阵列卡操作手册
  5. 计算机通识/14:算法常识/算法常识-01
  6. java eclipse svn_[Java教程]Eclipse 安装 SVN 的在线插件
  7. centos 部署.netcore 开发环境
  8. 开发人员在编写 HTML 和 CSS 时最常犯的六大错误
  9. 回复博友:初学ERP的建议
  10. 嵌入式系统——专业英语
  11. CNode社区——React实现
  12. Opencv之.convertTo
  13. Unity_AR制作_80
  14. ArcGIS Engine环境下VS窗体与Unity虚拟现实地理空间的嵌套和交互
  15. 成大事必备的九种办法与能力
  16. 手机在线提取视频中的音频方法
  17. 【已解决】机械革命s1-01触控手势失效解决方案
  18. raspberry树莓派用USB麦克风录音,只有杂音的问题
  19. HEVC中变换(Transform)过程中的scaling操作的理解
  20. 什么是身份证OCR接口

热门文章

  1. 专题---自定义实体类
  2. 11个实用又简洁的Python短代码,建议收藏
  3. 两个蓝牙模块JDY-08转TTL转USB上电扫描配对配置过程详解
  4. 献礼国庆 | 便民出行连成网 绿色发展心相通
  5. NDK RTMP直播客户端三
  6. org.xml.sax.SAXException: Invalid element
  7. mathML如何在谷歌浏览器进行展示
  8. 【汇正财经】国家股是什么意思?什么是国家股?
  9. 使用paddlehub制作酷炫视频
  10. 二级c语言考试真题及答案,全国计算机二级C语言考试真题及答案.doc