JPG图片转YUV422 RAW数据保存

JPG图片转YUV422数据文件

读取JPG图片文件,转成YUV422数据格式后,保存成数据文件。

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace cv;
using namespace std;

 int save_image_data(unsigned char* data_buf, unsigned int image_size, const char* file_name)
 {
	 FILE* fp = fopen(file_name, "wb+");
	 if (!fp) {
		 printf("(Error):%s Cannot open file %s\n", __func__, file_name);
		 return 1;
	 }

	 int ret = fwrite(data_buf, sizeof(unsigned char), image_size, fp);
	 if (ret != image_size) {
		 printf("write %s failed\n", file_name);
		 fclose(fp);
		 return 2;
	 }

	 fclose(fp);
	 return 0;
 }

#define PHOTO_width 640
#define PHOTO_height 512

int main()
{
	Mat src_s_img = imread("E:\\1.jpg");
	Mat src_img;
	resize(src_s_img, src_img, Size(PHOTO_width, PHOTO_height));

	Mat yuv422[3];
	cv::Mat yuv;
	cvtColor(src_img, yuv, CV_BGR2YUV);
	cv::split(yuv, yuv422);
	cv::resize(yuv422[1], yuv422[1], cv::Size(yuv.cols / 2, yuv.rows));
	cv::resize(yuv422[2], yuv422[2], cv::Size(yuv.cols / 2, yuv.rows));

	unsigned char yuv_data[PHOTO_width * PHOTO_height * 2];
	unsigned char* y_data = yuv422[0].data;
	unsigned char* v_data = yuv422[1].data;
	unsigned char* u_data = yuv422[2].data;
	
	for (int i = 0; i < PHOTO_width * PHOTO_height; i++) {
		if (i % 2) {
			yuv_data[i * 2 + 0] = *u_data;
			u_data++;
		}
		else {
			yuv_data[i * 2 + 0] = *v_data;
			v_data++;
		}
		yuv_data[i * 2 + 1] = *y_data;
		y_data++;
	}

	save_image_data(yuv_data, PHOTO_width * PHOTO_height * 2, "img.raw");
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值