commit avant la Ganguise + push en vrac

This commit is contained in:
tth 2019-08-24 13:24:01 +02:00
parent d1e9999e1c
commit a07883c0c2
7 changed files with 73 additions and 20 deletions

View File

@ -161,12 +161,27 @@ gris, rgb et rgba\index{rgba}.
#define FIMG_TYPE_RGBA 4 #define FIMG_TYPE_RGBA 4
\end{verbatim} \end{verbatim}
Les deux champs suivants (fval et count) sont à la disposition du yuser Un peu plus loin, nous avons les pointeurs vers les
qui peut jouer avec à loisir. différents \textsl{pixmaps} de l'image. En principe l'organisation
interne de ces zones est improbable, puisque qu'elle dérive
d'idées approximatives.
\vspace{1em}
Et pour finir dans la joie, nous avons les pointeurs vers les Les deux champs suivants (fval et count) sont à la disposition du
différents \textsl{pixmaps} de l'image. \textsl{yuser}
qui peut jouer avec à loisir pour faire, par exemple, ce genre de
chose. Imaginons un périphérique de capture qui nous fournisse des
images en gris sur 4 bits. Et que nous voulions cumuler\index{cumul}
quelques images...
\vspace{1em}
Le champ \textsl{count} sera mis à 0 et
le champ \textsl{fval} sera initialisé à 15.0
(valeur maximale renvoyée par le capteur).
Ensuite, dans la boucle capture/cumul, \textsl{count} sera
incrémenté à chaque passe, et nous aurons donc, en finale,
toutes les informations nécéssaire pour exploiter au mieux la dynamique
de notre image dans les étapes ultérieures.
@ -192,7 +207,7 @@ Bon, vous avez une image latente, et
vous souhaité dessiner dessus (ou dedans ?) avec vos encres vous souhaité dessiner dessus (ou dedans ?) avec vos encres
flottantes ? flottantes ?
\subsection{funcs/}\index{funcs/} \subsection{funcs/}\index{funcs/}\label{funcs}
Une bonne partie de ces fonctions est indéterministe. Ce qui Une bonne partie de ces fonctions est indéterministe. Ce qui
veut dire, en langage de tous les soirs, que ça risque de ne veut dire, en langage de tous les soirs, que ça risque de ne
@ -216,20 +231,34 @@ Dans un avenir incertain, il existera des pages de man\index{man}.
\subsection{mkfimg}\index{mkfimg}\label{mkfimg} \subsection{mkfimg}\index{mkfimg}\label{mkfimg}
Création d'un fichier contenant une image de teinte constante. Création d'un fichier contenant une image de « teinte » constante.
Cette notion de teinte est assez inconsistante pour le moment,
puisqu'il n'y a que la valeur par defaut : \textbf{0.0} que
l'on peut assimiler à un noir absolu\index{absolu}.
\subsection{fimgstats}\index{fimgstats}\label{fimgstats} \subsection{fimgstats}\index{fimgstats}\label{fimgstats}
Affichage de quelques valeurs calculées à partir d'un fichier Affichage de quelques valeurs calculées à partir d'un fichier
\texttt{.fimg}\index{.fimg}. \texttt{.fimg}\index{.fimg}.
\subsection{fimg2png et fimg2pnm} \subsection{fimg2png, fimg2pnm, fimg2tiff}
\index{fimg2png}\label{fimg2png} \index{fimg2png}\label{fimg2png}
\index{fimg2pnm}\label{fimg2pnm} \index{fimg2pnm}\label{fimg2pnm}
\index{fimg2tiff}\label{fimg2tiff}
Deux petits proggies pour exporter notre format\index{.fimg} secret Quelques petits proggies pour exporter notre format\index{.fimg} secret
vers des choses plus directement utilisables. vers des choses plus directement utilisables. À condition que le
code soit écrit et documenté en page \pageref{funcs}.
\subsection{fimg2gray}\index{fimg2gray}\label{fimg2gray}
Nous avons vu dans ce document que chaque image flottante pouvait
avoir plusieurs plans de réalité. Il ne faut en négliger aucun.
\vspace{1em}
Il faut quand même deviner que pour passer de l'espace RGB\index{RGB}
à une abstraction linéaire mono-dimensionnelle, il existe une foultitude
de méthodes, toutes plus légitimes que les autres.
% ------------------------------------------------------------------- % -------------------------------------------------------------------
\section{Video for Linux}\index{v4l2} \section{Video for Linux}\index{v4l2}
@ -248,7 +277,7 @@ v4l2.
% ------------------------------------------------------------------- % -------------------------------------------------------------------
\section{Et pour la suite ?} \section{Et pour la suite ?}
En fait, je fait de la photo par la méthode du « cumul » En fait, je fait de la photo par la méthode du « cumul »\index{cumul}
depuis plusieurs années. Une webcam\index{webcam}, depuis plusieurs années. Une webcam\index{webcam},
un Linux\index{Linux}, et ça \textsl{juste marche}. un Linux\index{Linux}, et ça \textsl{juste marche}.
Sauf que c'est quand même un peu galère à déplacer, il faut Sauf que c'est quand même un peu galère à déplacer, il faut

View File

@ -4,7 +4,7 @@
COPT = -Wall -fpic -g -no-pie -DDEBUG_LEVEL=0 COPT = -Wall -fpic -g -no-pie -DDEBUG_LEVEL=0
OBJS = fimg-core.o fimg-pnm.o fimg-file.o fimg-math.o \ OBJS = fimg-core.o fimg-pnm.o fimg-file.o fimg-math.o \
fimg-timers.o operators.o fimg-timers.o operators.o fimg-2gray.o
DEPS = Makefile ../floatimg.h DEPS = Makefile ../floatimg.h
# modify it 'as you like' # modify it 'as you like'
@ -23,6 +23,9 @@ t: t.c ../libfloatimg.a $(DEPS)
fimg-core.o: fimg-core.c $(DEPS) fimg-core.o: fimg-core.c $(DEPS)
gcc $(COPT) -c $< gcc $(COPT) -c $<
fimg-2gray.o: fimg-2gray.c $(DEPS)
gcc $(COPT) -c $<
operators.o: operators.c $(DEPS) operators.o: operators.c $(DEPS)
gcc $(COPT) -c $< gcc $(COPT) -c $<

0
tools/fimg2gray.c Normal file
View File

View File

@ -19,6 +19,8 @@ int main(int argc, char *argv[])
int foo, opt; int foo, opt;
int width, height; int width, height;
char *fname; char *fname;
float fvalue;
FloatImg fimg; FloatImg fimg;
while ((opt = getopt(argc, argv, "ho:v")) != -1) { while ((opt = getopt(argc, argv, "ho:v")) != -1) {

View File

@ -191,6 +191,7 @@ foo = fimg_create(&cumul,
fmt.fmt.pix.width, fmt.fmt.pix.height, fmt.fmt.pix.width, fmt.fmt.pix.height,
FIMG_TYPE_RGB); FIMG_TYPE_RGB);
fimg_clear(&cumul); fimg_clear(&cumul);
cumul.fval = 255.0;
#endif #endif
@ -220,7 +221,8 @@ for (i = 0; i < nbre_capt; i++) {
} }
if(verbosity > 1) { if(verbosity > 1) {
printf("%6d / %6d %9.3f\n", i, nbre_capt, fimg_timer_get(0)); printf("%6d / %6d %9.3f\n", i, nbre_capt,
fimg_timer_get(0));
} }
@ -246,15 +248,13 @@ for (i = 0; i < nbre_capt; i++) {
#endif #endif
#if SAVE_AS_CUMUL #if SAVE_AS_CUMUL
/** /** this is the slow version
x_rgb2fimg(buffers[buf.index].start, x_rgb2fimg(buffers[buf.index].start,
fmt.fmt.pix.width, fmt.fmt.pix.height, &grab); fmt.fmt.pix.width, fmt.fmt.pix.height, &grab);
fimg_add(&grab, &cumul, &cumul); fimg_add(&grab, &cumul, &cumul);
**/ **/
x_add_rgb2fimg(buffers[buf.index].start, x_add_rgb2fimg(buffers[buf.index].start,
fmt.fmt.pix.width, fmt.fmt.pix.height, &cumul); fmt.fmt.pix.width, fmt.fmt.pix.height, &cumul);
#endif #endif
#if SAVE_AS_FIMG #if SAVE_AS_FIMG

View File

@ -5,6 +5,11 @@
#include "funcs.h" #include "funcs.h"
/*
* Be careful, these functions are not yet fireproof,
* and calling conventions are fluctuating.
*/
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
int x_upscaler(unsigned char *src, int w, int h, FloatImg *d) int x_upscaler(unsigned char *src, int w, int h, FloatImg *d)
{ {
@ -13,6 +18,14 @@ int x, y, xx, yy;
float r, g, b; float r, g, b;
static unsigned short modz; static unsigned short modz;
/*
* check in image sizes are correct
*/
if ( d->width != w*2 || d->height != h*2 ) {
fprintf(stderr, "%s : dimension error\n", __func__);
return -2;
}
// rp = d->R, gp = d->G, bp = d->B; // rp = d->R, gp = d->G, bp = d->B;
for (y=0; y<h; y++) { for (y=0; y<h; y++) {
@ -49,7 +62,6 @@ for (iter=0; iter<size; iter++) {
return 0; return 0;
} }
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
/* --------------------------------------------------------------------- */
int x_add_rgb2fimg(unsigned char *src, int w, int h, FloatImg *d) int x_add_rgb2fimg(unsigned char *src, int w, int h, FloatImg *d)
{ {
int iter, size; int iter, size;
@ -64,8 +76,12 @@ for (iter=0; iter<size; iter++) {
*bp++ += (float)*src++; *bp++ += (float)*src++;
} }
d->count++; /* one more frame in the accumulator */
return 0; return 0;
} }
/* --------------------------------------------------------------------- */
int x_rgb2file(unsigned char *src, int w, int h, char *fname) int x_rgb2file(unsigned char *src, int w, int h, char *fname)
{ {
FloatImg buff; FloatImg buff;

View File

@ -95,7 +95,7 @@ return 0;
int enum_controls(int fd, char *txt, int k) int enum_controls(int fd, char *txt, int k)
{ {
struct v4l2_queryctrl qctrl; struct v4l2_queryctrl qctrl;
int foo, idx; int idx;
printf("-- controls enumeration '%s'\n", txt); printf("-- controls enumeration '%s'\n", txt);
@ -208,7 +208,6 @@ fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
foo = ioctl(vfd, VIDIOC_G_FMT, &fmt); foo = ioctl(vfd, VIDIOC_G_FMT, &fmt);
if (0 != foo) { if (0 != foo) {
perror("ioctl G_FMT"); perror("ioctl G_FMT");
// exit(1);
} }
else { else {
pr_v4l2_format("Experimental", &fmt); pr_v4l2_format("Experimental", &fmt);
@ -249,9 +248,13 @@ static void print_title(char *txt)
int foo, l; int foo, l;
l = strlen(txt); l = strlen(txt);
for (foo=0; foo<l+18; foo++) putchar('*'); puts(""); for (foo=0; foo<l+18; foo++)
putchar('*');
puts("");
printf("****** %s ******\n", txt); printf("****** %s ******\n", txt);
for (foo=0; foo<l+18; foo++) putchar('*'); puts("\n"); for (foo=0; foo<l+18; foo++)
putchar('*');
puts("\n");
} }
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
int main(int argc, char *argv[]) int main(int argc, char *argv[])