co2_gaz
Messages postés29Date d'inscriptionsamedi 21 octobre 2006StatutMembreDernière intervention14 septembre 2009
-
18 nov. 2008 à 11:30
benmor
Messages postés49Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention27 novembre 2011
-
14 sept. 2009 à 16:33
bonjour,
je dois écrire un programme en <layer id="google-toolbar-hilite-4" style="background-color: Fuchsia; color: black;"><layer id="google-toolbar-hilite-0" style="background-color: Yellow; color: black;">java</layer></layer> pour faire du traitement d'images et de vidéos. les interface graphique en <layer id="google-toolbar-hilite-3" style="background-color: Cyan; color: black;">swing</layer> c'est OK, mais pour les traitements il y a <layer id="google-toolbar-hilite-14" style="background-color: Chartreuse; color: black;"><layer id="google-toolbar-hilite-5" style="background-color: Fuchsia; color: black;">OpenCv</layer></layer> (en C++) qui est vraiment imbattable.
Mon problème c'est que avec <layer id="google-toolbar-hilite-15" style="background-color: Chartreuse; color: black;"><layer id="google-toolbar-hilite-6" style="background-color: Fuchsia; color: black;">OpenCv</layer></layer>
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 <layer id="google-toolbar-hilite-4" style="background-color: Cyan; color: black;">swing</layer>
et si oui comment?
co2_gaz
Messages postés29Date d'inscriptionsamedi 21 octobre 2006StatutMembreDernière intervention14 septembre 2009 14 sept. 2009 à 15:08
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);
// Find the Java Rectangle class object and constructor method
jclass clsRectangle = jenv->FindClass( "java/awt/Rectangle" );
jmethodID methodConstruct = jenv->GetMethodID( clsRectangle, "", "(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);