Member 12786800 Ответов: 1

Обработка изображений YUV 4:2:0 (IMC3)


Уважаемый господин,

У меня есть код для обработки изображений,мне нужно изменить цвет,например насыщенность, яркость или что-то еще.Итак, вы можете сказать мне, где я могу изменить код и что мне нужно, чтобы изменить свой код.

спасибо.

#include<stdio.h>
#include<stdlib.h>
#define WIDTH	176
#define HEIGHT	144

void NearestNeighbor(unsigned char *in, unsigned char *out, unsigned int width, unsigned int height);
void Process(unsigned char *in, unsigned char *out, unsigned int width, unsigned int height);

unsigned char *yIn, *cbIn, *crIn;
unsigned char *yOut, *cbOut, *crOut;

int main(void)
{
	FILE *fin, *fout;
	unsigned char *inbuf, *outbuf;
	unsigned int NoOfFrames, filesize, frame, Framesize;

	if ((fin = fopen("C:\\miss-america_qcif.yuv", "rb")) == NULL) {
		printf ("Error: Opening YUV file...\n");
		return -1;
	}
	if ((fout = fopen("Output.yuv", "wb")) == NULL) {
		printf ("Error: Opening output YUV file...\n");
		return -1;
	}

	Framesize =( WIDTH * HEIGHT) * (3 / 2);
	inbuf = (unsigned char*) malloc(sizeof(Framesize));
	outbuf = (unsigned char*) malloc(sizeof((2 * WIDTH) * (2 * HEIGHT) * 3 / 2));

	if (inbuf == NULL) {
		printf ("Error: Memory allocation of Input buffer.\n");
		return -1;
	}
	if (outbuf == NULL) {
		printf ("Error: Memory allocation of Output buffer.\n");
		return -1;
	}

	yIn = inbuf;
	cbIn = yIn + (WIDTH * HEIGHT);
	crIn = cbIn + ((WIDTH >> 1) * (HEIGHT >> 1));

	yOut = outbuf;
	cbOut = yOut + WIDTH * HEIGHT * 4;
	crOut = cbOut + WIDTH * HEIGHT;

	//	Finding the Number of Frames
	fseek(fin, 0, SEEK_END);
	filesize = ftell(fin);
	printf ("Number of filesize = %d\n", filesize);
	rewind(fin);
	NoOfFrames = filesize / Framesize;
	printf ("Number of Frames = %d\n", NoOfFrames);


	/************************************************************************
	 * Read one frame & upscale the frame									*
	 * Repeat the above process for all the frames in the file				*
	 ************************************************************************/
	for (frame = 0; frame < NoOfFrames; frame++) {
		fread(inbuf, sizeof(unsigned char), Framesize, fin);
		NearestNeighbor(inbuf, outbuf, (unsigned int) WIDTH, (unsigned int) HEIGHT);
		fwrite(outbuf, sizeof(unsigned char), Framesize * 4, fout);
		printf ("Processed Frame %d.\n", frame);
	}

	fclose(fin);
	fclose(fout);
	return 0;
}

void NearestNeighbor(unsigned char *in, unsigned char *out, unsigned int width, unsigned int height)
{
	unsigned char *inY, *inCb, *inCr, *outY, *outCb, *outCr;

	// Calculation of Input & Output YCbCr positions
	inY = in;
	inCb = inY + WIDTH * HEIGHT;
	inCr = inCb + (WIDTH >> 1) * (HEIGHT >> 1);
	outY = out;
	outCb = outY + 4 * WIDTH * HEIGHT;
	outCr = outCb + WIDTH * HEIGHT;

	//	Processing the Luminance(Y)
	Process(inY, outY, width, height);
	//	Process the Chrominance(CbCr)
	Process(inCb, outCb, width >> 1, height >> 1);
	Process(inCr, outCr, width >> 1, height >> 1);

	return;
}

void Process(unsigned char *in, unsigned char *out, unsigned int width, unsigned int height)
{
	unsigned int row, col;

	for (row = 0; row < height; row++) {
		for (col = 0; col < width; col++) {
			*out++					= *in;
			*(out + 2 * width)		= *in;
			*(out + 2 * width - 1)	= *in;
			*out++					= *in++;
		}
		out += 2 * width;
	}

	return;
}


Что я уже пробовал:

У меня отображается только изображение не сделали обработку нет

Suvendu Shekhar Giri

Кто написал этот код? не так ли?
Если нет,попросите оригинального автора объяснить вам это.

1 Ответов

Рейтинг:
0

Member 12786800

Привет Гири,
Это не я, но я понял код.Прошу вас, люди, чтобы изменить цвета изображения, как и я CCSv6.2 с DSP комплект DM6437 и не спрашиваю твоего решения.
спасибо.