begin process at 2010 02 09 17:09:02
  Trouver un code source :
 
dans
 
Accueil > Forum > 

JAVA / J2EE / J2ME

 > 

Multimédia

 > 

Image et vidéo

 > 

Gui Swing + jni c++ (OpenCv)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Gui Swing + jni c++ (OpenCv)

mardi 18 novembre 2008 à 11:30:27 | Gui Swing + jni c++ (OpenCv)

co2_gaz

bonjour,

je dois écrire un programme en java pour faire du traitement d'images et de vidéos. les interface graphique en swing c'est OK, mais pour les traitements il y a OpenCv (en C++) qui est vraiment imbattable.
Mon problème c'est que avec OpenCv je peut récupérer une frame dans laquelle s'affiche la vidéo et son traitement, mais je sais pas si on peut la combiner avec du GUI swing et si oui comment?
lundi 14 septembre 2009 à 14:13:43 | Re : Gui Swing + jni c++ (OpenCv)

benmor

Bonjour co2_gaz,

Si tu as fini par trouver la solution à ton problème, cela pourrait peut être m'intéresser aussi.

Merci,
Benoit MOREAU.

lundi 14 septembre 2009 à 15:08:03 | Re : Gui Swing + jni c++ (OpenCv)

co2_gaz

Réponse acceptée !

Bonjour,
Je viens de voir ton message,
J'ai wrapper vers opencv en utilisant JNI
tu peux voir ici http://www.ibm.com/developerworks/java/library/j-jni/
La solution est transmettre le tableau IplImage->data ( qui est un tableau de int) vers java puis créer avec un BufferedImage (on peut aussi créer la BI au niveau c/c++ et transmettre sa référence à JAVA).
exemple :

(en fin du compte j'ai du copié les images de java (JMF plus de formats), puis traitement, puis retransmission des résultats pour affichage dans la gui swing )

//////////////// copie d'une BI vers un buffer IplImage
/*
* Class: core_cv_Opencv
* Method: copy
* Signature: ([II)J
*/
JNIEXPORT jlong JNICALL Java_core_cv_Opencv_copy
(JNIEnv * jenv, jobject jobj, jintArray pixels, jint step){


IplImage * buffer;

// access pixel's values and
// check in case the VM tried to make a copy.
int * data = (int*) jenv->GetPrimitiveArrayCritical( pixels, 0 );
if ( data==NULL ) cout << "out of memory" << endl;

// data length
int srcsize = (int) jenv->GetArrayLength( pixels );


// the destination region size
int size = step*(srcsize/step);



// scaled image
buffer = cvCreateImage( cvSize(step,srcsize/step), IPL_DEPTH_8U, 3);


// add data
for( int i=0; i<size; i++ )
{
int x = i%step;
int y = i/step;

// retrieve scaled source and destination pixel's index
int srci = x+(y*step);
int desti = ( x*buffer->nChannels )+( y*buffer->widthStep );

// get RGB values
unsigned char b = data[ srci ] & 0xff;
unsigned char g = data[ srci ] >> 8 & 0xff;
unsigned char r = data[ srci ] >> 16 & 0xff;

// set RGB pixel's value
buffer->imageData[ desti ] = b;
buffer->imageData[ desti+1 ] = g;
buffer->imageData[ desti+2 ] = r;

}



jenv->ReleasePrimitiveArrayCritical( pixels, data, 0 );

return (long)buffer;

}


/////////////////////// utilisation objets java en C/C++


/*
* Class: core_cv_Opencv
* Method: detect
* Signature: (JFIIII)[Ljava/awt/Rectangle;
*/
JNIEXPORT jobjectArray JNICALL Java_core_cv_Opencv_detect
(JNIEnv * jenv, jobject jobj, jlong ptr,
jfloat scale, jint neighbors, jint flags, jint w, jint h){

// Find the Java Rectangle class object and constructor method
jclass clsRectangle = jenv->FindClass( "java/awt/Rectangle" );
jmethodID methodConstruct = jenv->GetMethodID( clsRectangle, "<init>", "(IIII)V" );

// create an empty output list for errors
jobjectArray out = jenv->NewObjectArray( 0, clsRectangle, NULL );

IplImage* image = (IplImage*)ptr;


storage = cvCreateMemStorage(0);

// nothing to do without this elements
// -> exit
if ( !image ){cerr<< "!cpp image null " <<endl; return out;}
if ( !frontCascade ){cerr<< " !cpp cascade null" <<endl; return out;}
if ( !storage ){cerr<< " !cpp storage null" <<endl; return out;}


// there can be more than one face in an image -> create a growable sequence of faces.
// detect the objects and store them in the sequence
CvSeq * frontFaces = cvHaarDetectObjects(
image,
frontCascade,
storage,
(double) scale,
(int) neighbors,
(int) flags,
cvSize( (int)w, (int)h )
);





// define output list length
out = jenv->NewObjectArray(frontFaces->total, clsRectangle, NULL );

// convert each face rectangle
for( int i=0; i<frontFaces->total; i++ ) {
// define face rectangle
CvRect * rect = (CvRect*) cvGetSeqElem( frontFaces, i );
// Construct a new Java Rectangle
jobject elem = jenv->NewObject( clsRectangle, methodConstruct, rect->x, rect->y, rect->width, rect->height );
// place the new elemnt in the output list
jenv->SetObjectArrayElement( out, i, elem );
}

// clear the memory storage
//cvClearMemStorage(storage );
cvReleaseMemStorage(&storage);

// return the result
return out;


}



lundi 14 septembre 2009 à 16:33:45 | Re : Gui Swing + jni c++ (OpenCv)

benmor

Merci beaucoup, cela pourra très certainement m'aider.



Cette discussion est classée dans : traitement, swing, gui, jni, opencv


Répondre à ce message

Sujets en rapport avec ce message

editeur de gui swing [ par garthos ] Je cherche un éditeur d'interface graphique qui génére du code propre et qui fonctionne sous MacOs X et Linux (car je suis en train d'abandonner Micro GUI Swing [ par cuicui ] salut a tous,je recherche un composant graphique en swing permettant,de y ecrire des messages ligne par ligne.Chaque ligne peut avoir une couleur diff JMF JNI OPENCV WEBCAM VoIP pblemme^2 [ par sassou001 ] jour xsalut tout le monde!!je doit réaliser une app de video confernce=>voIP pour mon stage d'ete et je trouve des problemes!! la JMstudio n'arrive pa interface [ par gigi00 ] bonjour tout le monde j'ai besoin de votre aide j'ai  un projet de gestion de caisse a realise avec netbeans  , et je trouve un probleme au niveau la Affichage des resultats des requetes dans une formulaire [ par legrandmifi ] Bonjour a tout le monde Je viens de créer un formualaire avec l'assistance de netbaens.qui est compose des tableaux. et je veux executer mes requetes remplir et afficher Jtable [ par ezzeddinehannachi ] bonjour, j'ai un probleme avec l'affichage de Jtable lors de l'exection de l'application normalement elle doit m'afficher le resultat d'une requete sq Comment transformer une application réaliser en swing en Applet [ par beberto56 ] Bonjour,qui peut m'expliquer comment je transforme le code d'une application que j'ai réalisé en java (technologie swing), en applet afin que je puiss Traitement d'image [ par nabil1986 ] Bonjour tout le mondeJe suis un nouveau membre de Javafr, et aussi un débutant en Java. Je suis en train de développer une application qui permet de s Traitement de fichier texte (txt) [ par abdestom ] Bonjour,Je cherche un programme JAVA qui prend en paramètre d'entrée un fichier texte (*.txt) et produit un rapport décrivant le contenu du fichier (n


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales