yuv裁剪

#include <sys/stat.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
char crop_1280[1928*1080];
static void boder_1280_cropping(unsigned int w, unsigned int h, char *buf, int border_w, int border_h)
{
	int j, k;
	int ow = w -border_w*2;
	int oh = h -border_h*2;
	int out_i = 0;
	int real_w, real_h;
	int count;
	int i;
	//Y
	for(j=0;j<h;j++){
		for(k=0, count = 0;k < w; k++) {
			if(k<border_w||k>(w-border_w-1) || j<border_h || j > (h - border_h - 1)){
			} else {
				count ++;
				crop_1280[out_i] =  buf[j*w+k];
				out_i++;
			}
		}
	}

	for (i = 0; i < w * (h / 2); i++) {
		/*U, Cb*/
		if (i % 2 == 0) {
			real_h = ( (i / 2) / (w / 2)) * 2;
			real_w = ( (i / 2) % (w / 2)) * 2;
			if(real_w<border_w||real_w>(w-border_w-1)||real_h<border_h || real_h>(h - border_h - 1)){
			} else {
				crop_1280[out_i] =  buf[w * h + i];
				out_i++;
			}

			/*V, Cr*/
		} else {
			real_h = ( (i / 2) / (w / 2)) * 2 + 1;
			real_w = ( (i / 2) % (w / 2)) * 2;
			if(real_w < border_w ||real_w > (w-border_w-1)||real_h < border_h || real_h>(h - border_h - 1)){
			} else {
				crop_1280[out_i] =  buf[w * h + i];
				out_i++;
			}
		}
	}
}

int main(int argc, char *args[])
{
	FILE *fp = fopen("0n.yuv", "rb+");
	FILE *out = fopen("0n_output.yuv", "wb+");
	char buf[1920*1080];
	fread(buf, 1, 1280*720*3/2, fp);
	boder_1280_cropping(1280, 720, buf, 50, 100);
	fwrite(crop_1280, 1, 1180* 520*3/2, out);
	fclose(fp);
	fclose(out);
	return 0;
}

这个程序裁减了1280*720的图像

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值