HELP ME !!! Passer une image JPEG en BMP. Projet de fin d'année
cs_FLOX
Messages postés3Date d'inscriptiondimanche 24 février 2002StatutMembreDernière intervention28 mars 2002
-
20 mars 2002 à 13:30
jopiou
Messages postés10Date d'inscriptionvendredi 17 novembre 2000StatutMembreDernière intervention 6 mai 2006
-
20 janv. 2006 à 20:07
Bonjour à tous,
Auriez vous un source me permettant de transformer une image JPEG en BMP. Tout cela d'une manière simple et compréhensive pour un débutant en programmation.
J'utilise en priorité C++ Builder 3.0.
Ne me laissez pas tomber c'est pour mon projet de fin d'étude.
Merci
A voir également:
HELP ME !!! Passer une image JPEG en BMP. Projet de fin d'année
cs_Corwyn
Messages postés1Date d'inscriptionvendredi 12 avril 2002StatutMembreDernière intervention12 avril 2002 12 avril 2002 à 14:51
Salut !
Je fais remonter le topic car cela m'intéresserait beaucoup également. Pour l'instant, je ne sais charger que les images au format PGM ce qui convient bien sous UNIX. Mais sous Windows, le format de référence est le BMP ou le JPEG... Il me faudrait une fonction (ou classe) me permettant de charger une image JPEG ou BMP dans un buffer...
Eur
Messages postés3Date d'inscriptionmercredi 17 mars 2004StatutMembreDernière intervention 3 mai 2005 27 mars 2004 à 17:18
Salut !
Manifestement je ne suis pas le seul dans ce cas !
Je dois réaliser une détection d'intrus depuis une caméra Axis 2100 ( caméra ip) qui fournit des images en jpeg uniquement ( à moins que je me trompe ). Mes profs l'ont acheté sans lire la notice technique...
Le problème est que je dois travaillé pixel par pixel ( imposé par le sujet ) et que je dois ensuite afficher l'image dans un programmes sous C++ Builder 3.0 .
Je suis donc à la recherche d'un composant permettant d'aller de JPEG à bmp, voir TIF ( c pas genant ) et si il peut faire aussi dans l'autre sens c pas plus mal non plus :)
chasse18
Messages postés51Date d'inscriptionmercredi 1 décembre 2004StatutMembreDernière intervention10 juin 20051 29 avril 2005 à 15:28
j'ai ce qu'il vous faut sa marche car j'ai le même projet et la
détéction marche pour l'instant mais doit être optimisé voici le code
mais si vous l'optimisé faite moi signe.
Eur
Messages postés3Date d'inscriptionmercredi 17 mars 2004StatutMembreDernière intervention 3 mai 2005 2 mai 2005 à 17:20
Merci c'est bien gentils. Cependant le projet a été terminé l'an dernier. Pour ceux que ça intéresse, nos profs nous fait faire la chose suivante ( un peu idiote, voire bcp mais bon, on a pas pu discuter avec eux ) : installer un composant graphique qui permet de manipuler les images sous Builder 3.0, intègré dans une fenêtre cachée, qui convertissait sauvegardait les images , appellée de n'importe quel type de fichier en BMP. Biensûr c'est lourd, pas du tout optimisé, et ça multiplie les accès disques car les fonctions de ce composant ne fonctionnait que sur le disque.
Cependant le jury de l'examen a fait une remarque qui te permettrait de rendre plus facile l'optimisation de ton programme : créer un disque dur virtuel, sur lequel tu enregistres tes images.
Pour ce qui est de la solution de garder la première image en mémoire, je pense que c'est pas une super idée, car mettons que le programme fonctionne 8h d'affilée, dans la journée, t'as des fluctuations de lumière assez grandes, qui sont encore plus visibles lorsque tu travailles en Jpg. Nous avions optés pour une comparaison d'images prises l'une à la suite de l'autre, avec un seuil de tolérance pour les fluctuations, et un seuil de tolérance quand à la masse de pixels différents.
Amicalement
Vous n’avez pas trouvé la réponse que vous recherchez ?
chasse18
Messages postés51Date d'inscriptionmercredi 1 décembre 2004StatutMembreDernière intervention10 juin 20051 3 mai 2005 à 09:50
si tu regarde le code tu veras que pour resterplus simple il te suffit
de récupérer la première image sans la traiter puis tu récupère la
seconde que tu compare et tu la remplace avec la première.
le probleme de ce code (qui marche) c'est qu'au bout 20 images seconde
cala ralentit l'application car elle n'a pas le temps de parcourrir la
matrice de pixel, que la deuxième image est déjà là.
sinon j'ai fait le test de lancer l'encodage en mpeg simultanement la
mémoire rest constant le cpu fait des aller retour entre 100 et 55%
mais acceptable.
si vous avez des idéés pour améliorer je suis preneur.
chasse18
Messages postés51Date d'inscriptionmercredi 1 décembre 2004StatutMembreDernière intervention10 juin 20051 3 mai 2005 à 09:54
j'ai oublié le disque virtuel je sai créer un disque virtuel et j'ai
essayer cependant étant donner la quantité d'image que me fournissent
les caméras ip et la quantité du disque virtuel (16 Mo).
Eur
Messages postés3Date d'inscriptionmercredi 17 mars 2004StatutMembreDernière intervention 3 mai 2005 3 mai 2005 à 19:35
Merci pour cette précision. Nous n'avons pas utilisés le composant TBitmap et ses fonctions. Nos profs nous l'ont interdit, en prétextant que le codage devait pouvoir être porté sous n'importe qu'elle plateforme, à part pour le chargement de l'image à l'écran. Pour l'analyse on a donc utilisé deux pointeurs, dans lesquels on stockait deux images, une première, puis la deuxième qui suivait. La comparaison se faisait sur ces deux images, puis prenait l'adresse de la deuxième et on prenait le premier pointeur que l'on faisait pointer vers cette adresse, ce qui évitait de passer par une phase de copie et donnais un gain en temps non négligeable. Pour optimiser, on a étudier une solution que les profs nous ont refusés, mais qui reste très utilisées quand même dans l'industrie. Au lieu de comparer chaque pixel de chaque image, tu peux prendre un pixel tout les X pixels. Ainsi, tu peux faire une sorte de grille plutôt qu'un rectangle plein, si tu vois ce que je veux dire.
Une autre solution pour optimiser serait de faire le md5 d'une ligne, et de le comparer au md5 de la même ligne sur la même image. Ca te permets de limiter le nombre de comparaison également.
Par exemple pour une image ça t'en ferai 480 au lieu de 307200 (dans le cas ou tu compares chaque pixel).
chasse18
Messages postés51Date d'inscriptionmercredi 1 décembre 2004StatutMembreDernière intervention10 juin 20051 4 mai 2005 à 09:58
je vai regarder ton systeme de md5 en ce qui concerne les ptr, je
t'explique mon pb si tu veus j'ai une classe clEcranVCl qui est en
relation avec la clJpegVcl dans cette classe je manipule des jpeg alors
qu'au dessus de cette classe et dans toutes les autres ( 10 ) je
manipule mes images avec des pointeurs intelligent ce qui permet de ne
pas à avoir à traiter de la destruction de ceux-ci, mon pb est que je
voulais créer mon objet DetectionMouv dans clEcranVcl et passer le ptr
à clJpegVcl qui appelerai les méthodes utile à la detection du
mouvement. Mais je ne sai pas pourquoi il me créé un deuxième objet
DetectionMouv alors que je lui est passé par référence et donc sa
plante, car je ne conserver l'image en mémoire.
j'ai donc opté pour la création dans clJpegVcl et la sauvegarde sur le
disque, mais c'est très bourin et sa me plais oas du tout.
bicolitcho
Messages postés5Date d'inscriptionmercredi 11 janvier 2006StatutMembreDernière intervention17 janvier 2006 11 janv. 2006 à 20:28
salut à tous !!!
Alors moi aussi je fais un projet avec une camera Ip axis 2100
C++ et avec C++ builder 5,mon but est d'inclure l'image de la camera Ip
en flux continue dans mon IHM .Si vous avez encore les sources de vos
ancien projet ou si vous pouvez m'aidez se serais très bien!!!
Je vous remercie tous !!please c'est pour mon projet de fin d'année!!
chasse18
Messages postés51Date d'inscriptionmercredi 1 décembre 2004StatutMembreDernière intervention10 juin 20051 11 janv. 2006 à 20:40
Tu recupère le flux Stream de la camera et tu l'affiche dans paintbox ou dans l'objet superieur je sai plus car c'était il y a deux de cela donc faut que je recherche.
//Attributs VCL
this->id_connection = _composant_idhttp;
this->id_connection->Request->Username = s_login.c_str();
this->id_connection->Request->Password = s_password.c_str();
}
//---------------------------------------------------------------------------
/****************************************************************************
* Destructeur
/****************************************************************************/
ConnectionVCL::~ConnectionVCL() {}
//---------------------------------------------------------------------------
/****************************************************************************
* --- Implémentation de l'interface iConnection ---
* Methode abstraite permettant de recupérer un média à partir d'une
* requete sous forme de string
/****************************************************************************/
void ConnectionVCL::MediaRequest(std::string& _s_requete,Media* _p_media)
{
if(_p_media == NULL)
{
throw ErrGenerale("ConnectionVCL::MediaRequest -> Pointeur sur Media NULL");
}
//On créer un stream pour stocker les infos de la requête
StreamVCL* data_stream = new StreamVCL();
//On lance la requete
try
{
id_connection->Get(this->DoRequest(_s_requete).c_str(),data_stream->GetStream());
}
catch(ErrGenerale& e)
{
throw ErrGenerale("ConnectionVCL::MediaRequest -> ErrGenerale = " + e.MessageErr());
}
catch(...)
{
throw ErrGenerale("ConnectionVCL::MediaRequest -> Erreur lors de la demande de media");
}
//On remet au depart du stream
data_stream->ResetPosition();
//On charge l'image à partir du stream dans le média
_p_media->LoadFromStream(data_stream);
//Destruction du stream
if(data_stream != NULL)
delete data_stream;
}
//---------------------------------------------------------------------------
/****************************************************************************
* --- Implémentation de l'interface iConnection ---
* Methode abstraite permettant d'effectuer une action à partir
* d'une requete sous forme de string
/****************************************************************************/
void ConnectionVCL::ActionRequest(std::string& _s_requete)
{
//On créer un stream pour stocker les infos de la requête
StreamVCL* data_stream = new StreamVCL();
//On lance la requete
id_connection->Get(this->DoRequest(_s_requete).c_str(),data_stream->GetStream());
//Destruction du stream
if(data_stream != NULL)
delete data_stream;
}
//---------------------------------------------------------------------------
/***********************************************************************
* Methodes permettant de formater correctement la requete
/**********************************************************************/
std::string ConnectionVCL::DoRequest(const std::string& _s_requete) const
{
return (s_protocol+s_ip+":"+s_port+_s_requete);
}
bicolitcho
Messages postés5Date d'inscriptionmercredi 11 janvier 2006StatutMembreDernière intervention17 janvier 2006 17 janv. 2006 à 14:33
rebonjour,
je revient de nouveau à l'assault lol!!
donc la je suis en cour et on se penche encore sur le sujet de la camera ip avec notre professeur qui lui meme a du mal à trouver car sous windows et borland.
Donc si tu pouvais me mettre sur la piste encore une fois parce que j'ai rien compris au VCL et IDHTTP merci
chasse18
Messages postés51Date d'inscriptionmercredi 1 décembre 2004StatutMembreDernière intervention10 juin 20051 19 janv. 2006 à 19:12
tu peux récupérer l'image jpeg grace au scritp cgi des caméra axis sur le site de axis tu trouvera comment aceder au script ou avec éteral tu fait une requete sur la cam et tu analyse se qu'il ya sur le réseaux(transfere tcp).