JPG图像转存为NV12格式
使用opencv函数 将JPG图像转存为NV12格式分为两步:
- 将BGR格式转为I420;
- 将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格式相关推荐
- 将4DfMRI图像转存为.npy格式
将4DfMRI图像转存为.npy格式 一.加载数据 import nibabel as nib import os import numpy as npimg_path = 'E:/python/ni ...
- 用python读取pg数据库中的blob类型图片数据,转换存成jpg格式存到本地文件夹
先啰嗦一下,热热身 在工作中,我们常见到数据库中的数据类型主要为char,varchar,text等,但是有时我们也会用blob格式来存储语音文件或者图像文件,在网上找了很多,都没找到合适的办法,只好 ...
- 【nv12 格式转换】不同图像数据格式之间转换代码实操
文章目录 1 问题先行 2 nv12介绍 2.1 YUV格式 2.2 NV12排布 3 不同数据格式之间转换实操 4 参考链接 1 问题先行 nv12是什么格式?和常见的rgb/bgr有什么关系吗?他 ...
- android 将bitmap存为 bmp格式图片大小,把bitmap保存成 BMP的格式 并且位深度为1
生成图片的要求:图像格式采用单色位图文件格式(BMP) 要求bmp的位深度为1 参考: 代码有点小瑕疵 : bitmap的图片宽度要求是:8的整数倍 /** * 将Bitmap存为 .bmp格式图片 ...
- python使用openCV加载图像、并将BGR格式转换成HSV格式、定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)、并使用mask信息进行颜色分离、BGR格式的图像转化为RGB、并可视化
python使用openCV加载图像.并将BGR格式转换成HSV格式.定义HSV格式中需要分离颜色的掩码(掩模)区间(mask).并使用mask信息进行颜色分离.将BGR格式的图像转化为RGB.可视化 ...
- R语言使用magick包的image_write函数将已有图像以任何指定的格式导出保存到磁盘上(例如将原文将从png转化为jpeg)
R语言使用magick包的image_write函数将已有图像以任何指定的格式导出保存到磁盘上(例如将原文将从png转化为jpeg) 目录
- android 将bitmap存为 bmp格式图片大小,Android Bitmap保存為.bmp格式,圖像轉化為黑白圖片...
/** * 把一個View的對象轉換成bitmap */ static Bitmap getViewBitmap(View v) { v.clearFocus(); v.setPressed(fals ...
- 计算机中的 marshal 是什么意思?(列集:将数据从某种格式存为流格式的操作)(序列化)(marshalling、unmarshalling散集)
今天看dbus框架,看到一个marshal method call to message不知道是什么意思 IPC进程间通信 D-Bus(Desktop Bus)快速入门(以libdbus-glib库为 ...
- 基于libyuv库的NV12格式图片的缩放
网上关于使用libyuv库在Linux下对NV12格式进行缩放的教程是在太少了,对于博主这种菜鸡来说简直就是煎熬,因为本人阅读源码的能力实在很差啊!!!但不管怎么样,把这几天所得写下来,希望对大家有帮 ...
最新文章
- 差分霍尔器件测量电路
- Windows线程调度学习(一)
- Android之用sharedUserId来实现不同应用(APK)数据共享
- LSI_阵列卡操作手册
- 计算机通识/14:算法常识/算法常识-01
- java eclipse svn_[Java教程]Eclipse 安装 SVN 的在线插件
- centos 部署.netcore 开发环境
- 开发人员在编写 HTML 和 CSS 时最常犯的六大错误
- 回复博友:初学ERP的建议
- 嵌入式系统——专业英语
- CNode社区——React实现
- Opencv之.convertTo
- Unity_AR制作_80
- ArcGIS Engine环境下VS窗体与Unity虚拟现实地理空间的嵌套和交互
- 成大事必备的九种办法与能力
- 手机在线提取视频中的音频方法
- 【已解决】机械革命s1-01触控手势失效解决方案
- raspberry树莓派用USB麦克风录音,只有杂音的问题
- HEVC中变换(Transform)过程中的scaling操作的理解
- 什么是身份证OCR接口