c yuv422转yuv420p

2024-01-06 20:04
文章标签 yuv422 yuv420p

本文主要是介绍c yuv422转yuv420p,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

思路:

yuv422 存储格式为 y   u   y    v   y  u   y   v 

                                y  u    y    v   y   u   y   v

yuv420p  存储最简单,先存所以的y,再存u,最后v

所以先把422所有的y存在一起,再提奇数行的u  ,偶数行舍弃。提完u后,再提v,v也是偶数行不提取。

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/videodev2.h> 
#include <string.h>
#include <sys/mman.h>
#include <linux/fb.h>
#include <math.h>
#define PI 3.1415926#define  pic_width   640
#define  pic_heigth  480#define filename  "/home/wjs/Pictures/my.yuv"
#define file_out  "/home/wjs/Pictures/"           //输出文件目录int  main(void) {FILE *f=fopen(filename,"rb");unsigned char i[2*pic_heigth*pic_width]={};fread(i,2*pic_heigth*pic_width,1,f);unsigned char out[pic_heigth*pic_width*3/2]={};int t=0;for(int a=0;a<2*pic_heigth*pic_width;a=a+2){out[t]=i[a];t++;}for(int a=0;a<pic_heigth;a=a+2){for(int b=0;b<2*pic_width;b=b+4){out[t]=i[a*(2*pic_width)+1+b];t++;}}for(int a=0;a<pic_heigth;a=a+2){for(int b=0;b<2*pic_width;b=b+4){out[t]=i[a*(2*pic_width)+3+b];t++;}}chdir(file_out);FILE *o=fopen("640480.yuv","w+b");fwrite(out,pic_heigth*pic_width*3/2,1,o);fclose(o);return 0;
}

 

 

这篇关于c yuv422转yuv420p的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/577450

相关文章

v4l2(video4linux2) yuyv(yuv422)、MJPEG、H.264

V4L2(Video4Linux2)是Linux内核中的视频设备接口框架,专门用于捕获和输出视频数据。V4L2广泛应用于各种视频设备的驱动程序开发,如网络摄像头、电视调谐器、视频采集卡、以及其他视频输入/输出设备。 ### V4L2的主要功能 1. **视频采集**:    - 通过摄像头、视频采集卡等设备捕获视频数据。    - 支持多种视频格式,如YUYV、MJPEG、H.264等。 2

sws_scale像素格式转换RGBA转YUV420P,并存入文件

#include <iostream>#include <fstream>using namespace std;extern "C" { //指定函数是c语言函数,函数名不包含重载标注//引用ffmpeg头文件#include <libswscale/swscale.h>}//预处理指令导入库#pragma comment(lib,"swscale.lib")#define

yuv420转yuv422使用neno加速的示例代码

一、使用none实现yuv420快速转换为yuv422 #include <arm_neon.h> static vs_int32_t yuv420_yuv422_conver(vs_uint8_t *p_yuv420_y, vs_uint8_t *p_yuv420_uv, vs_uint32_t yuv420_y_stride, vs_uint32_t yuv420_uv_stride, v

【OpenCV】正确创建用于保存YUV420P格式的cv::Mat

【目录】郭老二博文之:图像视频汇总 1、问题描述 cv::Mat保存RGB24或BRG24格式时,传入宽、高和格式类型CV_8UC3就行了;今天在创建cv::Mat用来保存YUV420P时,有点懵圈了,因为类型是CV_8UC1,直接传宽和高,只能保存Y分量。因此需要宽或者高乘以一个系数,才能保存完整。 一开始我将,这个系数1.5乘给了宽,并将宽width赋值给了行数rows: cv::Mat

Android下使用camera2和Surfaceview预览图像并取得YUV420p数据回调

Android 5.0(21)之后,android.hardware.Camera被废弃(下面称为Camera1),还有一个android.graphics.Camera,这个android.graphics.Camera不是用来照相的,是用来处理图像的,可以做出3D的图像效果之类的,之前的Camera1则由android.hardware.Camera2来代替。 Camera2支持RAW输出,

解码AVC(h264)裸流为yuv420P写入文件

使用AVC裸流解析器解析AVC裸流文件,然后解码为yuv420P格式写入文件 // 解码h264#include "myLog.h"#include <iostream>extern "C"{#include "libavcodec\avcodec.h"}#define VIDEO_INBUF_SIZE 20480 // 最初读取数据大小#define VIDEO_REFILL_T

视频格式转换方法之264、avi、YUV420P

ffmpge(下载)可以非常快速的实现h264视频的分离和混流,并且是命令行的操作,也没有什么参数需要设置,非常适合批量转换: ffmpeg -i input.mp4 output.avi input可以以是格式h264,avi ;output可以是格式h264、avi等 ffmpeg -i input.mkv -y -vcodec copy -acodec copy output.mp4

YUV使用总结 —— Android常用的几种格式:NV21/NV12/YV12/YUV420P的区别

http://doc.okbase.net/raomengyang/archive/186891.html 工作问题接触到图像这一块,需要对手机摄像头采集的原始帧做Rotate或者scale,但无奈对此的了解少之又少,于是网上搜了一顿,完事后将最近所学总结一下,以方便之后的人别踩太多坑。 首先想要了解YUV为何物,请猛戳: https://msdn.microsoft.

YUV420P格式分析

http://blog.csdn.net/huang546213693/article/details/53008536 转自:https://my.oschina.NET/u/589963/blog/167766 YUV格式通常有两大类:打包(packed)格式和平面(planar)格式。前者将YUV分量存放在同一个数组中,通常是几个相邻的像素组成一个宏像

【Codecs系列】颜色空间转换CSConvert:YUV420P转YUV422P

DATE: 2019.9.1 YUV420P转YUV422P #include <stdio.h>#include <stdlib.h>#include <string.h>int main(int argc, char** argv){