PDA

Visualizza la versione completa : [C++] Regolare la luminositÓ di una foto da programma


Maurix1969
16-06-2008, 13:32
Gentili Amici,

mi sapreste dare indicazioni su come regolare da programma, in C++ (senza quindi la necessitÓ dell'intefaccia utente) la luminositÓ di una fotografia? Esistono delle routines (opene source) richiamabili? Ho letto qualcosa di simile su Gimp.

In pratica, da una foto mostrata su una pagina web, vorrei visualizzarne automaticamente una seconda con una luminositÓ migliore.

Vi ringrazio dell'aiuto che vorrete darmi.

Vi saluto,

Maurizio

ps. Visto che mi trovo in una fase d'analisi iniziale, dietro suggerimento potrei comunque usare anche linguaggi diversi dal C++.

LeleFT
16-06-2008, 13:37
Manca l'indicazione del linguaggio con cui intendi realizzare la cosa.
E' essenziale, oltre che richiesto dal Regolamento.


Ciao. :ciauz:

menphisx
16-06-2008, 15:48
Prima di tutto sai cos'Ŕ la luminositÓ ?

Maurix1969
16-06-2008, 17:42
Cia Menphisx,

E' chiaramente pi¨ che pertinente la tua domanda! Ed in effetti, ora che mi fai meglio riflettere, non s˛ se Ŕ la "luminositÓ" il parametro che mi serve controllare e modificare da programma per il mio scopo.

Non so se Ŕ possibile ma vorrei riuscire a "normalizzare" automaticamente l'esposizione di una generica fotografia (che nel mio caso sarÓ sicuramente un viso in primo piano).

Ovvero, acquisire un immagine; sottoporla ad un filtro che normalizzi automaticamente l'esposizione ad un riconosciuto valore medio accettabile; riproporre l'immagine corretta. In pratica, se l'immagine Ŕ scura dovrÓ essere automaticamente schiarita, se Ŕ chiara andrÓ scurita.

Non conosco i parametri di riferimento e non saprei ri-calcolare una corretta esposizione (media rispetto l'intera immagine) di una fotografia.

Non so se esistono routines che possono aiutarmi in tal senso ed ecco che chiedo un aiuto a voi, aiuto che giÓ mi Ŕ stato utile per questo successivo approfondimento!

Aspetto eventuali altri gentili suggerimenti.

Maurizio

LeleFT
16-06-2008, 18:19
Originariamente inviato da LeleFT
Manca l'indicazione del linguaggio con cui intendi realizzare la cosa.
E' essenziale, oltre che richiesto dal Regolamento.


Ciao. :ciauz:
Mi auto-quoto...


Ciao. :ciauz:

menphisx
17-06-2008, 04:34
LeleFT credo si tratti di C++ :)

Riguardo alla luminositÓ Ŕ:


(R+G+B) / 3


CioŔ una semplice media aritmetica delle componenti RGB.

MItaly
17-06-2008, 14:09
Potresti usare la libreria FreeImage++ (wrapper C++ di FreeImage) e il metodo fipImage::adjustBrightness (http://freeimage.sourceforge.net/fip/classfipImage.html#d9284730c288ad864fff3bf7b236940 5), tramite il quale puoi aumentare o diminuire la luminositÓ dell'immagine. D'altra parte per fare quello che chiedi credo sia pi¨ utile attuare una equalizzazione dell'istogramma dell'immagine (possibile sempre tramite FreeImage++), come descritto qui (http://en.wikipedia.org/wiki/Histogram_equalization).

Maurix1969
18-06-2008, 19:05
Originariamente inviato da MItaly
Potresti usare la libreria FreeImage++ (wrapper C++ di FreeImage) e il metodo fipImage::adjustBrightness (http://freeimage.sourceforge.net/fip/classfipImage.html#d9284730c288ad864fff3bf7b236940 5), tramite il quale puoi aumentare o diminuire la luminositÓ dell'immagine. D'altra parte per fare quello che chiedi credo sia pi¨ utile attuare una equalizzazione dell'istogramma dell'immagine (possibile sempre tramite FreeImage++), come descritto qui (http://en.wikipedia.org/wiki/Histogram_equalization).

MItaly, grazie mille!

in effetti cercavo proprio delle librerie come quelle che mi hai segnalato e la funzione equalizza-Istogramma, come dici tu, credo possa aiutarmi nel mio problema.

Nel caso conosciate altri metodi (o altre librerie) vi sarei grato in altri eventuali suggerimenti.

Grazie ancora,

Maurizio

Maurix1969
21-06-2008, 15:41
Cari amici,

cosý come suggeritomi da MItaly, per regolare la luminositÓ di una foto in c++, ho scaricato la libreria eseguibile (non i sorgenti) FreeImage.

Non riesco per˛, principalmente per la mia inesperienza, ad eseguire una qualsiasi delle funzioni di FreeImage in un programmino di prova ed ho dubbi sul fatto di non aver, tral'altro, "registrato" la DLL scaricata che ho invece solo copiato in C:\Windows\system32

Dopo vari messaggi di errore in compilazione ho capito che dovevo, oltre a referenziare la libreria FreeImage.h, referenziare anche quella per il link FreeImage.Lib

La compilazione va a buon fine ma in esecuzione il programma non carica la foto (prima funzione che volevo provare) ed ho il dubbio che non venga proprio richiamata la funzione! Non mostra infatti mai: "Caricata correttamente" ma, sempre: "Fine Programma".

Il programmino d'esempio Ŕ il seguente:
-----------------------------------------------------------------------------------
- #include "freeimage.h"
- #include <iostream>
-
- int main ()
- {
- FIBITMAP *bitmap = FreeImage_Load(FIF_BMP, "c:\sorgenti c++\miafoto.bmp",
- BMP_DEFAULT);
-
- if (bitmap)
- { // bitmap successfully loaded!
- FreeImage_Unload(bitmap);
- std::cout << "Caricata correttamente!";
- }
- else
- {
- std::cout << "Fine Programma";
- }
-
- return(0);
- }
---------------------------------------------------------------------------------------

Non riesco ad immaginare se i problemi di esecuzione possano essere dovuti alla libreria eseguibile FreeImage erroneamente installata oppure errore/mancanza di dichiarazioni-codice nel mio programmino di prova;

Vi ringrazio molto per un aiuto che vorrete darmi.

Maurizio.

menphisx
21-06-2008, 16:24
Tag CODE ed indentazione prego.

:ciauz:

Loading