begin process at 2012 02 14 12:15:30
  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 Activer l'ecoute sur le jcombobox+swing [ par yness91 ] Bonsoir tout le monde En effet j'ai un 2 jcombobox (swing) dans une de mes interfaces... Je vous explike ce que je veux faire... Quand je sélectionn visibilite des variables [ par manou9 ] Bonjour J'ai un probleme qui est un peu complique D'abord j'utilise le langage java, j'ai 2 classes : Deliberations et f5 Dans la classe Deliberations aide de faire un fond d'ecran dans une JFrame [ par princetunis ] SVP aide moi de faire ajouté un fond d'ecran a cette code et merci: package TestFrame; /** * * @author Adoul */ public class Bienvenue extends j URGENT SVP: Aide oracle sur JAVA [ par master8686 ] Je suis entrain de preparer un programme de generateur graphique de resuetes SQL mais je suis bloqué par un probléme lié au driver de oracle sous java SVP: Aide oracle sur JAVA [ par master8686 ] Salut tous, Je suis entrain de preparer un programme de generateur graphique de resuetes SQL mais je suis bloqué par un probléme lié au driver de ora


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

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 : 3,026 sec (3)

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