forked from tTh/FloatImg
introduction des ajustements de contraste
This commit is contained in:
parent
210af322b0
commit
c7a428c5f0
4
.gitignore
vendored
4
.gitignore
vendored
@ -1,6 +1,10 @@
|
||||
|
||||
lib/*.o
|
||||
lib/t
|
||||
lib/*.fimg
|
||||
lib/*.png
|
||||
lib/*.gif
|
||||
|
||||
funcs/*.o
|
||||
|
||||
*.a
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
12
lib/runme.sh
12
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
|
||||
|
24
lib/t.c
24
lib/t.c
@ -13,29 +13,6 @@
|
||||
|
||||
int verbosity;
|
||||
|
||||
/* ---------------------------------------------------------------- */
|
||||
int petit_dessin(FloatImg *img)
|
||||
{
|
||||
int x, y;
|
||||
float r, g, b;
|
||||
|
||||
for (y=0; y<img->height; y++) {
|
||||
|
||||
r = (float)y / (float)img->height;
|
||||
|
||||
for (x=0; x<img->width; 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);
|
||||
|
||||
|
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user