From c7a428c5f04a989940b5cffe25f5adf24b25fd06 Mon Sep 17 00:00:00 2001 From: tth Date: Fri, 15 Nov 2019 10:39:22 +0100 Subject: [PATCH] introduction des ajustements de contraste --- .gitignore | 4 ++++ floatimg.h | 8 +++++++- lib/fimg-2gray.c | 3 +++ lib/runme.sh | 12 +++++++----- lib/t.c | 24 ------------------------ v4l2/grabvidseq.c | 42 +++++++++++++++++++++++++++++++++++++++--- 6 files changed, 60 insertions(+), 33 deletions(-) diff --git a/.gitignore b/.gitignore index 23951a4f..c4755817 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,10 @@ lib/*.o lib/t +lib/*.fimg +lib/*.png +lib/*.gif + funcs/*.o *.a diff --git a/floatimg.h b/floatimg.h index 126172f3..1ea38726 100644 --- a/floatimg.h +++ b/floatimg.h @@ -2,7 +2,7 @@ * floatimg.h */ -#define FIMG_VERSION 75 +#define FIMG_VERSION 76 /* * in memory descriptor @@ -36,6 +36,12 @@ typedef struct { #define FILE_TYPE_PNM 2 #define FILE_TYPE_PNG 3 +/* lib/contrast.c */ +#define CONTRAST_NONE 0 +#define CONTRAST_SQRT 1 +#define CONTRAST_POW2 2 +#define CONTRAST_COS01 3 + /* * core module */ diff --git a/lib/fimg-2gray.c b/lib/fimg-2gray.c index 7e21ca5f..cf7ab5f2 100644 --- a/lib/fimg-2gray.c +++ b/lib/fimg-2gray.c @@ -33,6 +33,9 @@ if (FIMG_TYPE_RGB != src->type) { if (FIMG_TYPE_GRAY != dst->type) { fprintf(stderr, "%s : bad dst type %d on %p\n", __func__, dst->type, dst); + /* + * may be we can convert dst picture on the fly ? + */ return -9; } diff --git a/lib/runme.sh b/lib/runme.sh index 8e2cd404..35f07cc4 100755 --- a/lib/runme.sh +++ b/lib/runme.sh @@ -1,21 +1,23 @@ #!/bin/bash -grabvidseq -s 960x720 -n 600 -p 0.5 -vv -g -o original.fimg +../v4l2/grabvidseq -s 960x720 -n 10000 -p 0.078 \ + -vv -g -c none \ + -o original.fimg make t && ./t for picz in original power2 squareroot cos_01 do - echo _______________ ${picz} + echo _______________________ ${picz} # ../tools/fimgstats -v ${picz}.fimg ../tools/fimg2pnm -v ${picz}.fimg ${picz}.pnm - convert -pointsize 36 \ - -fill white -annotate +10+28 "${picz}" \ - -fill black -annotate +12+30 "${picz}" \ + convert -pointsize 48 \ + -fill black -annotate +14+40 "${picz}" \ + -fill white -annotate +16+42 "${picz}" \ ${picz}.pnm ${picz}.png rm ${picz}.pnm diff --git a/lib/t.c b/lib/t.c index d5af6355..001adcc7 100644 --- a/lib/t.c +++ b/lib/t.c @@ -13,29 +13,6 @@ int verbosity; -/* ---------------------------------------------------------------- */ -int petit_dessin(FloatImg *img) -{ -int x, y; -float r, g, b; - -for (y=0; yheight; y++) { - - r = (float)y / (float)img->height; - - for (x=0; xwidth; x++) { - - g = (float)x / (float)img->width; - b = 0.0;; - - fimg_plot_rgb(img, x, y, r, g, b); - - } - - } - -return -1; -} /* ---------------------------------------------------------------- */ int essai_2gray(FloatImg *picz, char *outname) @@ -77,7 +54,6 @@ double maxi; foo = fimg_create_from_dump(fname, &dessin); foo = fimg_clone(&dessin, ©, 0); - maxi = (double)fimg_get_maxvalue(&dessin); fprintf(stderr, "image source valeur maxi = %f\n", maxi); diff --git a/v4l2/grabvidseq.c b/v4l2/grabvidseq.c index 48b2f948..c69632c1 100644 --- a/v4l2/grabvidseq.c +++ b/v4l2/grabvidseq.c @@ -64,6 +64,16 @@ if (r == -1) { } } /* --------------------------------------------------------------------- */ +int contraste(char *str) +{ + +if (!strcmp(str, "sqrt")) return CONTRAST_SQRT; +if (!strcmp(str, "pow2")) return CONTRAST_POW2; +if (!strcmp(str, "cos01")) return CONTRAST_COS01; + +return -1; +} +/* --------------------------------------------------------------------- */ void help(int v) { if (verbosity) { @@ -74,9 +84,10 @@ puts("\t-d /dev/?\tselect video device"); puts("\t-g\t\tconvert to gray"); puts("\t-n NNN\t\thow many frames ?"); puts("\t-O ./\t\tset Output dir"); -puts("\t-o bla\t\tset output filename"); +puts("\t-o bla.xxx\tset output filename"); puts("\t-p NN.N\t\tperiod in seconds"); puts("\t-s WxH\t\tsize of capture"); +puts("\t-c mode\t\tcontrast enhancement"); puts("\t-u\t\ttry upscaling..."); puts("\t-v\t\tincrease verbosity"); exit(0); @@ -104,9 +115,10 @@ int nbre_capt = 1; /* nombre de captures */ int opt; int width = 640; int height = 480; -double t_final; +double t_final, maxvalue; int to_gray = 0; int upscaling = 0; +int contrast = 0; char *dest_dir = "."; /* no trailing slash */ char *outfile = "out.pnm"; @@ -114,8 +126,9 @@ char *outfile = "out.pnm"; FloatImg cumul; #endif -while ((opt = getopt(argc, argv, "d:ghn:o:O:p:s:uv")) != -1) { +while ((opt = getopt(argc, argv, "c:d:ghn:o:O:p:s:uv")) != -1) { switch(opt) { + case 'c': contrast = contraste(optarg); break; case 'd': dev_name = optarg; break; case 'g': to_gray = 1; break; case 'h': help(0); break; @@ -317,6 +330,29 @@ if (to_gray) { // save cumul to file if (verbosity) fprintf(stderr, "saving cumul to '%s'\n", outfile); +/* ----- nouveau 15 nov 2019 */ +maxvalue = cumul.fval * cumul.count; +if (verbosity) { + fprintf(stderr, "computed maxvalue = %g\n", maxvalue); + } +switch (contrast) { + case CONTRAST_NONE: + fprintf(stderr, "contrast: none\n"); + break; + case CONTRAST_SQRT: + fimg_square_root(&cumul, NULL, maxvalue); + break; + case CONTRAST_POW2: + fimg_power_2(&cumul, NULL, maxvalue); + break; + case CONTRAST_COS01: + fimg_cos_01(&cumul, NULL, maxvalue); + break; + default: + fprintf(stderr, "bad contrast method\n"); + break; + } + foo = format_from_extension(outfile); switch (foo) { case FILE_TYPE_FIMG: