begin process at 2010 03 20 12:23:44
  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 travailler avec javaFX et Swing GUI Forms en meme temps??? [ par saharSR ] bjr à tous, je veux vous poser une question que peut etre vous semble débile,mais ça va m'aider beaucoup dans mon projet: est ce qu'on peut réaliser u creer une application msn m aider a la terminer [ par massami123 ] bnsoir j ai une application qui consite a faire un msn j ai pu faire la connexion avec le serveur et meme apporté la liste de contact mais je suis blo SWING/font/XML/arbre binaire algo URGENT !!! [ par mkstraits ] salut !à partir d'une interface swing java, on est supposé pouvoir entrer des formules (dans un certain langage de logique) exemple simple: (a.b)=(c+d Traitement immédiat [ par lom ] Voilaje suis nouveau programmeur java et j'aimerai savoir comment fait on ou quelle méthode utilisée pour que mon programme traite immédiatement des f JNI: long int a quoi comme Native Type? [ par zebulaon ] Bonjour,Je cherche à savoir à mettre une variable C++ id : du type long int (enfin je crois que c'est ça qui correspond à: printf ("\nID______________ java, JNI et DLL [ par Milie ] Bonjour, je vous écris pour un pb de chargement de DLL. J'ai déja fait un tutorial avec JNI de type HelloWorld mais j'ai à present besoin d'intergrer Swing chemin erroné!!! [ par snake64 ] Bonjour à tous !!Encore une question bidon mais dont je ne trouve pas la réponse!!!J'ai voulu gérer mes boutons de souris et donc j'utilise la classe


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
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,671 sec (4)

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