保存为NV12格式的yuv420,yyyuvuvuv

#include <string>
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>int main()
{std::string jpgpath = "test.jpg";cv::Mat img = cv::imread(jpgpath);int w = img.cols;                 /* 宽 */int h = img.rows;                 /* 高 */int imageLength = h * w * 3 / 2;  /* 图像y、u、v个数总和 */unsigned char*yuv_nv12 = new unsigned char[imageLength]; /* 存储nv12数据 */unsigned char*yuv = new unsigned char[imageLength];      /* 存储CV_BGR2YUV_I420数据 */cv::cvtColor(img, img, CV_BGR2YUV_IYUV);                 /* BGR空间转换为CV_BGR2YUV_I420 */memcpy(yuv_nv12, img.data, imageLength*sizeof(unsigned char));  /* 此时yuv_nv12中存储的是CV_BGR2YUV_I420类型数据 */memcpy(yuv, img.data, imageLength*sizeof(unsigned char));       /* 此时yuv中存储的是CV_BGR2YUV_I420类型数据 */int num = 0;  /* 对u、v个数的计数 */for (int j = w * h; j != imageLength; j += 2){yuv_nv12[j] = yuv[w * h + num];                      /* 对yuv_nv12中u分量进行赋值 */yuv_nv12[j + 1] = yuv[w * h + w * h / 4 + num];      /* 对yuv_nv12中v分量进行赋值 */++num;}/* 保存nv12格式的yuv420 */FILE *fp = NULL;std::string outpath = "test.yuv";fp = fopen(outpath.c_str(), "wb+");if (!fp){printf("file does not exist\n");}fwrite(yuv_nv12, 1, sizeof(char)* imageLength, fp);fclose(fp);fp = NULL;/* 释放内存 */delete[]yuv_nv12;delete[]yuv;yuv_nv12 = nullptr;yuv = nullptr;system("pause");
}

保存为CV_BGR2YUV_I420(YUV420)格式的yuv420,yyyuuuvvv

#include <string>
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>int main()
{std::string jpgpath = "test.jpg";cv::Mat img = cv::imread(jpgpath);cv::resize(img, img, cv::Size(img.cols/2*2,img.rows/2*2));int w = img.cols;int h = img.rows;int imageLength = h * w * 3 / 2;unsigned char*yuv = new unsigned char[imageLength];cv::cvtColor(img, img, CV_BGR2YUV_IYUV);  // CV_BGR2YUV_IYUV即I420: YYYYYYYY UU VVmemcpy(yuv, img.data, imageLength * sizeof(unsigned char));/* 保存YUV420格式的yuv420 */FILE *fp = NULL;std::string outpath = "test.yuv";errno_t ret = fopen_s(&fp, outpath.c_str(), "wb+");if (ret){printf("file does not exist\n");}fwrite(yuv, 1, sizeof(char)* imageLength, fp);fclose(fp);fp = NULL;/* 释放内存 */delete[]yuv;yuv = nullptr;system("pause");
}

反过来,将上面一段代码生成的yuv再转换为jpg图像:

#include <string>
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>int main()
{std::string yuvpath = "test.yuv";FILE *fp = NULL;errno_t ret = fopen_s(&fp, yuvpath.c_str(),"rb");if (ret){printf("file does not exist\n");}int w = 640;int h = 512;int imageLength = h * w * 3 / 2;cv::Mat img_yuv = cv::Mat(h * 3 / 2, w,CV_8UC1);fread(img_yuv.data, sizeof(unsigned char), h*w, fp);fread(img_yuv.data+ h*w, sizeof(unsigned char), h*w/4, fp);fread(img_yuv.data+ h*w*5/4, sizeof(unsigned char), h*w/4, fp);fclose(fp);fp = NULL;cv::Mat img_bgr;cvtColor(img_yuv, img_bgr, CV_YUV2BGR_I420); // 后缀I420代表YUV是I420格式的cv::imwrite("img_bgr.jpg", img_bgr);
}

所用测试图像test.jpg为:

图1 test.jpg(640*513)

图片保存为YUV格式相关推荐

  1. 读取4:2:0格式YUV序列的Y分量、U分量以及V分量,并分别保存为.yuv格式(matlab实现)

    读取4:2:0格式YUV序列的Y分量.U分量以及V分量,并分别保存为.yuv格式,不多说,具体程序如下: read_Y_U_V.m %% 读取4:2:0格式YUV的Y.U和V分量,然后将三个分量分别保 ...

  2. FFmpeg4入门07:解码视频并保存为YUV格式文件

    上一篇我们解码并保存了其中的几帧确保解码过程和结果是对的.本篇我们将解码整个视频并保存为标准的YUV格式(YUV格式具体信息详见YUV格式介绍),我们就选YUV420P(I420)作为输出格式. 保存 ...

  3. 解决谷歌浏览器图片保存为JFIF格式的问题

    很长的一段时间我在从网上保存图片素材的时候,都发现图片保存下载的格式是JFIF格式,这种格式在win10系统下使用图片工具倒也可以正常打开,唯一让我感到苦恼的是无法直接拖进PS中处理,需要先将他它进行 ...

  4. Matplotlib 将图片保存为 .tiff 格式

    sci论文为防止图片失真,最好提交 tiff 格式(位图)或者其它类型的矢量图. 因为经常用matplotlib绘图,于是可以按照以下方法将图片保存为 tiff 格式,之后使用PS进行压缩. 主要用到 ...

  5. 将图片保存为.EPS格式

    (1) matlab可直接将生成图片保存为eps格式. print -fhandle -rresolution -dfileformat filename 例子:set(gcf,'paperposit ...

  6. 如何将图片保存为EPS格式

    (1) matlab可直接将生成图片保存为eps格式. print -fhandle -rresolution -dfileformat filename 例子:set(gcf,'paperposit ...

  7. vue项目中,将信息生成二维码图片保存为png格式并下载

    生成二维码: https://blog.csdn.net/weixin_37861326/article/details/80362591 保存为png格式并下载: https://blog.csdn ...

  8. 批量png图片数据转yuv格式数据并保存

    #include <opencv2/opencv.hpp> #include <iostream>using namespace std; using namespace cv ...

  9. python-opencv 将连续图片保存为视频格式

    import cv2 import os#图片路径 im_dir = '/home/suanfa/data/out/201708231503440' #输出视频路径 video_dir = '/hom ...

  10. MATLAB读取一张RGB图片转成YUV格式

    https://www.cnblogs.com/hythink/p/5421720.html https://blog.csdn.net/scottly1/article/details/421926 ...

最新文章

  1. 前端之图形学-2 着色器
  2. 根据后台的数据设置前端页面展示效果
  3. 进程管理ps,top
  4. python3 uvloop 简介
  5. java native内存_android java内存与native内存
  6. c语言参数传入函数赋值后传出来,c语言第10次实验内容函数2邹显春.ppt
  7. C语言基础-01-指针
  8. wh计算公式_功率计算公式
  9. matlab 傅里叶变换 频谱图,傅里叶变换与信号频谱图.PDF
  10. 1990年图灵奖--费尔南多·考巴脱简介
  11. 什么样的商业计划书才是投资人喜欢的
  12. 黑马程序员就业班第二天的总结以及自己的看法
  13. Linux磁盘分区和逻辑卷
  14. ConvertUtil
  15. 如何裁剪图片中不要的部分?这个裁剪方法很好用
  16. 院校情报福州大学计算机考研分析,福州大学情报学考研
  17. Android Studio 4.1.2 自定义 APP 启动图标样式步骤【APP开发之入门四】
  18. 报废摩托车发生交通事故影响责任划分吗
  19. python中的ddt用法
  20. 絮絮叨叨的2020年小总结

热门文章

  1. 车牌拍照系统上传服务器,服务器端车牌拍照识别
  2. android 车牌自动识别,Android端车牌识别可以用来实现摄像头扫描识别车牌?
  3. Java数组 排序算法和常见异常
  4. 【机器学习基石】概述(一)
  5. unity aspon word excel ppt pdf转图片
  6. 【流媒体开发】6、ffplay命令
  7. photoshop标尺工具_工具设置:PhotoShop
  8. 8uftp,如何实现8uftp使用
  9. 数据管理系统 php,dms: 数据管理系统;采用mvc模型,存php原生操作无模板引擎;响应式前端框架huiadmin套用,扁平化风格,兼容移动端;...
  10. 一键报警(IP对讲)