图片保存为YUV格式
保存为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为:
图片保存为YUV格式相关推荐
- 读取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分量,然后将三个分量分别保 ...
- FFmpeg4入门07:解码视频并保存为YUV格式文件
上一篇我们解码并保存了其中的几帧确保解码过程和结果是对的.本篇我们将解码整个视频并保存为标准的YUV格式(YUV格式具体信息详见YUV格式介绍),我们就选YUV420P(I420)作为输出格式. 保存 ...
- 解决谷歌浏览器图片保存为JFIF格式的问题
很长的一段时间我在从网上保存图片素材的时候,都发现图片保存下载的格式是JFIF格式,这种格式在win10系统下使用图片工具倒也可以正常打开,唯一让我感到苦恼的是无法直接拖进PS中处理,需要先将他它进行 ...
- Matplotlib 将图片保存为 .tiff 格式
sci论文为防止图片失真,最好提交 tiff 格式(位图)或者其它类型的矢量图. 因为经常用matplotlib绘图,于是可以按照以下方法将图片保存为 tiff 格式,之后使用PS进行压缩. 主要用到 ...
- 将图片保存为.EPS格式
(1) matlab可直接将生成图片保存为eps格式. print -fhandle -rresolution -dfileformat filename 例子:set(gcf,'paperposit ...
- 如何将图片保存为EPS格式
(1) matlab可直接将生成图片保存为eps格式. print -fhandle -rresolution -dfileformat filename 例子:set(gcf,'paperposit ...
- vue项目中,将信息生成二维码图片保存为png格式并下载
生成二维码: https://blog.csdn.net/weixin_37861326/article/details/80362591 保存为png格式并下载: https://blog.csdn ...
- 批量png图片数据转yuv格式数据并保存
#include <opencv2/opencv.hpp> #include <iostream>using namespace std; using namespace cv ...
- python-opencv 将连续图片保存为视频格式
import cv2 import os#图片路径 im_dir = '/home/suanfa/data/out/201708231503440' #输出视频路径 video_dir = '/hom ...
- MATLAB读取一张RGB图片转成YUV格式
https://www.cnblogs.com/hythink/p/5421720.html https://blog.csdn.net/scottly1/article/details/421926 ...
最新文章
- 前端之图形学-2 着色器
- 根据后台的数据设置前端页面展示效果
- 进程管理ps,top
- python3 uvloop 简介
- java native内存_android java内存与native内存
- c语言参数传入函数赋值后传出来,c语言第10次实验内容函数2邹显春.ppt
- C语言基础-01-指针
- wh计算公式_功率计算公式
- matlab 傅里叶变换 频谱图,傅里叶变换与信号频谱图.PDF
- 1990年图灵奖--费尔南多·考巴脱简介
- 什么样的商业计划书才是投资人喜欢的
- 黑马程序员就业班第二天的总结以及自己的看法
- Linux磁盘分区和逻辑卷
- ConvertUtil
- 如何裁剪图片中不要的部分?这个裁剪方法很好用
- 院校情报福州大学计算机考研分析,福州大学情报学考研
- Android Studio 4.1.2 自定义 APP 启动图标样式步骤【APP开发之入门四】
- 报废摩托车发生交通事故影响责任划分吗
- python中的ddt用法
- 絮絮叨叨的2020年小总结
热门文章
- 车牌拍照系统上传服务器,服务器端车牌拍照识别
- android 车牌自动识别,Android端车牌识别可以用来实现摄像头扫描识别车牌?
- Java数组 排序算法和常见异常
- 【机器学习基石】概述(一)
- unity aspon word excel ppt pdf转图片
- 【流媒体开发】6、ffplay命令
- photoshop标尺工具_工具设置:PhotoShop
- 8uftp,如何实现8uftp使用
- 数据管理系统 php,dms: 数据管理系统;采用mvc模型,存php原生操作无模板引擎;响应式前端框架huiadmin套用,扁平化风格,兼容移动端;...
- 一键报警(IP对讲)