forked from tTh/FloatImg
Merge branch 'master' of ssh://tetalab.org:2213/tTh/FloatImg
Ok
This commit is contained in:
commit
9e4b0e795c
|
@ -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}
|
||||
|
@ -370,7 +371,8 @@ return 0;
|
|||
\end{verbatim}
|
||||
|
||||
Je vous laisse imaginer les dégats que peut faire cette
|
||||
fontion en utilisation réelle.
|
||||
fontion en utilisation réelle. Mieux, je vous propose
|
||||
d'essayer par vous-même.
|
||||
En particulier tout le reste du code qui suppose qu'un pixel
|
||||
ne peut \textbf{pas} être négatif.
|
||||
Vous pouvez aussi remarquer qu'il n'y a pas de controle
|
||||
|
@ -438,7 +440,8 @@ en première approche, alors commençont par le plus simple,
|
|||
les valeurs moyennes de chaque composante.
|
||||
|
||||
Puis nous rajouterons\footnote{Les patchs sont les bienvenus}
|
||||
le calcul de la variance\index{variance}.
|
||||
le calcul de la variance\index{variance}. Les compétences
|
||||
de \texttt{schmod777} sont attendues au dd2\index{dd2}.
|
||||
|
||||
\subsection{fimgfx}\index{fimgfx}\label{fimgfx}
|
||||
|
||||
|
@ -446,6 +449,17 @@ le calcul de la variance\index{variance}.
|
|||
Attention, je vais expérimenter un parsing un peu étrange
|
||||
sur les arguments de la ligne de commande. coredump expected.}
|
||||
|
||||
\vspace{1em}
|
||||
|
||||
À l'heure actuelle\footnote{décembre 2019, vers 15:30}, nous avons
|
||||
déja quelques ajustements basiques de contraste.
|
||||
|
||||
\begin{verbatim}
|
||||
tth@daubian:~/Devel/FloatImg/tools$ ./fimgfx -v -h
|
||||
--- fimg special effects ---
|
||||
cos01 cos010 pow2 sqrt
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{fimgops}\index{fimgops}\label{fimgops}
|
||||
|
||||
Quelques opérations diverses entre deux images, qui doivent être
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* floatimg.h
|
||||
*/
|
||||
|
||||
#define FIMG_VERSION 78
|
||||
#define FIMG_VERSION 80
|
||||
|
||||
/*
|
||||
* in memory descriptor
|
||||
|
@ -41,6 +41,7 @@ typedef struct {
|
|||
#define CONTRAST_SQRT 1
|
||||
#define CONTRAST_POW2 2
|
||||
#define CONTRAST_COS01 3
|
||||
#define CONTRAST_COS010 4
|
||||
|
||||
/*
|
||||
* core module
|
||||
|
@ -83,7 +84,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);
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ if (!strcmp(str, "none")) return CONTRAST_NONE;
|
|||
if (!strcmp(str, "sqrt")) return CONTRAST_SQRT;
|
||||
if (!strcmp(str, "pow2")) return CONTRAST_POW2;
|
||||
if (!strcmp(str, "cos01")) return CONTRAST_COS01;
|
||||
if (!strcmp(str, "cos010")) return CONTRAST_COS010;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
@ -132,6 +133,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:
|
||||
|
|
|
@ -122,6 +122,10 @@ FloatImg cumul;
|
|||
while ((opt = getopt(argc, argv, "c:d:ghn:o:O:p:s:uv")) != -1) {
|
||||
switch(opt) {
|
||||
case 'c': contrast = fimg_id_contraste(optarg);
|
||||
if (contrast < 0) {
|
||||
fputs("unknow contrast\n", stderr);
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
case 'd': dev_name = optarg; break;
|
||||
case 'g': to_gray = 1; break;
|
||||
|
@ -234,8 +238,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 +337,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);
|
||||
|
@ -342,6 +348,9 @@ switch (contrast) {
|
|||
case CONTRAST_COS01:
|
||||
fimg_cos_01(&cumul, NULL, maxvalue);
|
||||
break;
|
||||
case CONTRAST_COS010:
|
||||
fimg_cos_010(&cumul, NULL, maxvalue);
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "bad contrast method\n");
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue