add a new (and funny) contrast adjustement
This commit is contained in:
		
							parent
							
								
									116cb56e13
								
							
						
					
					
						commit
						de3b31db94
					
				@ -317,7 +317,8 @@ dans l'upscaling.} effectuées.
 | 
			
		||||
L'autre façon de procéder est d'explorer notre image à la
 | 
			
		||||
recherche de la valeur maximale.
 | 
			
		||||
La fonction \texttt{float fimg\_get\_maxvalue(\&fimg)} est
 | 
			
		||||
faite pour ça. C'est la méthode utilisée par l'outil qui
 | 
			
		||||
faite pour ça.
 | 
			
		||||
C'est actuellement la méthode utilisée par l'outil qui
 | 
			
		||||
sert à faire les modifications de contraste (page \pageref{fimgfx}.
 | 
			
		||||
 | 
			
		||||
\vspace{1em}
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@
 | 
			
		||||
 *	floatimg.h
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define		FIMG_VERSION	78
 | 
			
		||||
#define		FIMG_VERSION	79
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	in memory descriptor
 | 
			
		||||
@ -83,7 +83,7 @@ int fimg_id_contraste(char *name);
 | 
			
		||||
int fimg_square_root(FloatImg *s, FloatImg *d, double maxval);
 | 
			
		||||
int fimg_power_2(FloatImg *s, FloatImg *d, double maxval);
 | 
			
		||||
int fimg_cos_01(FloatImg *s, FloatImg *d, double maxval);
 | 
			
		||||
 | 
			
		||||
int fimg_cos_010(FloatImg *s, FloatImg *d, double maxval);
 | 
			
		||||
 | 
			
		||||
int fimg_mk_gray_from(FloatImg *src, FloatImg*dst, int k);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -132,6 +132,38 @@ for (idx=0; idx<nbre; idx++) {
 | 
			
		||||
return 0;
 | 
			
		||||
}
 | 
			
		||||
/* ---------------------------------------------------------------- */
 | 
			
		||||
int fimg_cos_010(FloatImg *s, FloatImg *d, double maxval)
 | 
			
		||||
{
 | 
			
		||||
int		nbre, idx;
 | 
			
		||||
double		dval;
 | 
			
		||||
 | 
			
		||||
if (s->type != FIMG_TYPE_RGB) {
 | 
			
		||||
	fprintf(stderr, "%s : type %d invalide\n",
 | 
			
		||||
				__func__, s->type);
 | 
			
		||||
	return -4;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if (NULL==d) {
 | 
			
		||||
	d = s;
 | 
			
		||||
	}
 | 
			
		||||
else	{
 | 
			
		||||
	if (d->type != FIMG_TYPE_RGB) {
 | 
			
		||||
		fprintf(stderr, "%s : dst type %d invalide\n",
 | 
			
		||||
					__func__, d->type);
 | 
			
		||||
		return -4;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
nbre = s->width * s->height * 3;
 | 
			
		||||
 | 
			
		||||
for (idx=0; idx<nbre; idx++) {
 | 
			
		||||
	dval = s->R[idx] / maxval;
 | 
			
		||||
 | 
			
		||||
	d->R[idx] = maxval * (0.5 - 0.5 * cos(2*3.141592654*dval));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ---------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -19,10 +19,11 @@ typedef struct {
 | 
			
		||||
	int		nbarg;
 | 
			
		||||
	} Fx;
 | 
			
		||||
 | 
			
		||||
enum fxid { Fx_cos01, Fx_pow2, Fx_sqrt };
 | 
			
		||||
enum fxid { Fx_cos01, Fx_cos010, Fx_pow2, Fx_sqrt };
 | 
			
		||||
 | 
			
		||||
Fx fx_list[] = {
 | 
			
		||||
	{ "cos01",		Fx_cos01,	0 },
 | 
			
		||||
	{ "cos010",		Fx_cos010,	0 },
 | 
			
		||||
	{ "pow2",		Fx_pow2,	0 },
 | 
			
		||||
	{ "sqrt",		Fx_sqrt,	0 },
 | 
			
		||||
	{ NULL,			0,	0 }
 | 
			
		||||
@ -52,11 +53,14 @@ return -1;
 | 
			
		||||
/* --------------------------------------------------------------------- */
 | 
			
		||||
static void help(int lvl)
 | 
			
		||||
{
 | 
			
		||||
Fx		*fx;
 | 
			
		||||
 | 
			
		||||
printf("fimg special effects (%d)\n", lvl);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
puts("--- fimg special effects ---");
 | 
			
		||||
printf("\t");
 | 
			
		||||
for (fx=fx_list; fx->name; fx++) {
 | 
			
		||||
	printf("%s ", fx->name);
 | 
			
		||||
	}
 | 
			
		||||
puts("");
 | 
			
		||||
exit(0);
 | 
			
		||||
}
 | 
			
		||||
/* --------------------------------------------------------------------- */
 | 
			
		||||
@ -88,6 +92,8 @@ if (foo) {
 | 
			
		||||
switch (act) {
 | 
			
		||||
	case Fx_cos01:
 | 
			
		||||
		fimg_cos_01(&src, &dest, maxval);		break;
 | 
			
		||||
	case Fx_cos010:
 | 
			
		||||
		fimg_cos_010(&src, &dest, maxval);		break;
 | 
			
		||||
	case Fx_pow2:
 | 
			
		||||
		fimg_power_2(&src, &dest, maxval);		break;
 | 
			
		||||
	case Fx_sqrt:
 | 
			
		||||
 | 
			
		||||
@ -234,8 +234,10 @@ cumul.count = 0;
 | 
			
		||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
 | 
			
		||||
xioctl(fd, VIDIOC_STREAMON, &type);
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
if (verbosity)	fprintf(stderr,"pid %d grabbing %d picz...\n",
 | 
			
		||||
					getpid(), nbre_capt);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
for (i = 0; i < nbre_capt; i++) {
 | 
			
		||||
	do	{
 | 
			
		||||
@ -331,7 +333,7 @@ if (verbosity) {
 | 
			
		||||
	}
 | 
			
		||||
switch (contrast) {
 | 
			
		||||
	case CONTRAST_NONE:
 | 
			
		||||
		fprintf(stderr, "contrast: none\n");
 | 
			
		||||
		// if (verbosity) fprintf(stderr, "contrast: none\n");
 | 
			
		||||
		break;
 | 
			
		||||
	case CONTRAST_SQRT:
 | 
			
		||||
		fimg_square_root(&cumul, NULL, maxvalue);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user