Sunteți pe pagina 1din 25

Ma doc OpenCV / Javacv / Javacpp

Par X. HNAULT www.mon-club-elec.fr Sept 2011 Tous droits rservs Licence GPLv3

Remarques gnrales :
> La plupart des fonctions javacv implmentant les fonctions openCV sont dans le package javacv.cpp de la librairie. La librairie javacv comporte aussi le package javacv. > Toutes les sous-classes d'une classe peuvent tre utilises dans une fonction recevant cette classe. Par exemple, une fonction acceptant un CvArr peut recevoir indiffremment l'une des sous classes CvArr suivante : opencv_core.CvMat, opencv_core.CvMatND, opencv_core.CvSeq, opencv_core.CvSparseMat, opencv_core.IplImage. > On appelle ici meta-classe une classe qui comporte plusieurs sous-classes > Le package javacv.cpp est structur de la mme faon que la librairie OpenCV elle-mme et comporte notamment : >> la meta-classe opencv_core : regroupant toutes les classes objets fondamentales de la librairie Opencv ainsi que les fonctions de base de manipulation des objets >> la meta-classe opencv_imgproc : regroupant des classes pour le traitement d'image > La plupart des classes (en fait toutes apparemment) des modules opencv_core, opencv_imgprog, etc... sont des sous-classes de javacpp.Pointer ( attention, pas javacv.cpp !), javacpp tant la librairie d'interface C/C++ => Java. Ainsi, toutes les classes sont potentiellement utilisables avec les fonctions (ou mthodes) recevant un objet Pointer. > A noter aussi un (mta-)classe opencv_contrib qui comporte des classes priori intressantes tester : cf dtecteur peau (skin) ou encore la mta-classe feature 2D qui comporte des fonctions intressante (cf SimpleBlobDetector) ou legacy (dtection de blob...)

Vue d'ensemble simplifie de la librairie javacv.cpp / articulation avec javacpp


Doc gnrale OpenCV : http://opencv.itseez.com/index.html > La librairie javacv dispose de plusieurs centaines voire milliers de fonctions : le but ici est de rpertorier les fonctions et classes utiles pour un usage dans Processing dans le cadre d'une utilisation de base d'OpenCV. Notamment, les fonctions de la meta-classe highgui ne sont pas beaucoup dveloppes ici, car Processing fournit ses propres fonctions d'affichages qui sont ici privilgies, de mme que les fonctions de dessins. On se concentre ici sur les fonctions de

traitement d'image avanc qui ne sont pas disponible dans Processing. com.googlecode.javacpp.Pointer

glecode.javacv.cpp.opencv_core

Fonctions et classes de base. ncv.itseez.com/modules/core/doc/core.html FONCTIONS DISPONIBLES

s_docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_core.html

| | ----- com.googlecode.javacv.cpp.opencv_core.CvArr (meta-c | | | | ----- com.googlecode.javacv.cpp.opencv_core | | | | | |----|

| ----- com.googlecode.javacv.cpp.opencv_core

e un objet IplImage

| ----- com.googlecode.javacv.cpp.opencv_core

| ----- com.googlecode.javacv.cpp.opencv_core .create() -

CvArr dans un autre ) : convertit un CvArr dans un autre 0 un CvArr ?

| ----- com.googlecode.javacv.cpp.opencv_core

nitialise la lecture d'un objet CvSeq avec un objet CvReader

trace les contours partir du rsultat de la fonction cvFindContours

ecode.javacv.cpp.opencv_imgproc

t classes de traitement et d'analyse d'image. itseez.com/modules/imgproc/doc/imgproc.html FONCTIONS DISPONIBLES

docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_imgproc.html

age

e formes

et

lecode.javacv.cpp.opencv_highgui

asses d'interface graphique et gestion de fichiers. .itseez.com/modules/highgui/doc/highgui.html FONCTIONS DISPONIBLES

docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_highgui.html

arge une image dans un IplImage partir d'un fichier

code.javacv.cpp.opencv_features2d

ns et classes d'outils d'analyse d'image 2D eez.com/modules/features2d/doc/features2d.html

ocs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_features2d.html

glecode.javacv.cpp.opencv_video

onctions et classes d'analyse vido. cv.itseez.com/modules/video/doc/video.html

_docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_video.html

lecode.javacv.cpp.opencv_calib3d

ses de calibration de camra et reconstruction 3D v.itseez.com/modules/calib3d/doc/calib3d.html

docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_calib3d.html

ecode.javacv.cpp.opencv_objdetect

classes de dtection d'objet (cascade classifier) tseez.com/modules/objdetect/doc/objdetect.html

docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_objdetect.html

oglecode.javacv.cpp.opencv_ml

ions et classes d'apprentissage machine pencv.itseez.com/modules/ml/doc/ml.html

es_docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_ml.html

glecode.javacv.cpp.opencv_flann

sses de gestion des espaces dimensions multiples cv.itseez.com/modules/flann/doc/flann.html

_docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_flann.html

Autres meta-classes disponibles dans la librairie javacv ?

glecode.javacv.cpp.opencv_legacy

classes de dtection de contour ? Lib interne ?

lecode.javacv.cpp.opencv_contrib Module opencv_core : fonctions et classes de base.


Javadoc :http://www.mon-clubelec.fr/mes_docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_core.html

tions et classes de dtection de contour

Fonctions propres essentielles/utiles opencv_core


Les classes filles de la classe opencv_core NB : les classes filles de la classe opencv_core commence par une majuscule. NB2 : pour la plupart des sous-classes, il existe une fonction propres de la classe opencv_core qui permet l'initialisation simple de l'objet correspondant. Par exemple, pour la classe CvSize, il existe une fonction cvSize(). NB3 : Pour les sous-classes complexes, il existe galement une fonction de cration de la forme

createObjet (createImage, createCvMemBlock, )

Cration / Dclaration des objets fondamentaux


opencv_core.cvCreateImage () Desc :

Cre une IplImage en crant l'entte (header) et la matrice associe. (voir classe opencv_core.IplImage )
Javadoc Javacv :

static opencv_core.IplImage cvCreateImage(opencv_core.CvSize size, int depth, int channels)


Doc openCV :

http://opencv.itseez.com/modules/core/doc/old_basic_structures.html#createimage
Paramtres :

> size : taille de l'image de type CvSize (objet de 2 valeurs largeur, hauteur) cr simplement avec fonction opencv_core.cvSize(hauteur,largeur) > depth : nombre de bits codant l'image 8, 16, 32 bits, signs ou non. Plusieurs champs prdfinis possibles CV_8U, CV_16S, etc... ou IPL_DEPTH_8U voir : http://opencv.itseez.com/modules/core/doc/old_basic_structures.html#IplImage NB : faire prcder le nom du champ par opencv_core. > channels : le nombre de canaux utiliss pour l'image. 3 si RGB simple, 1 si niveaux de gris, 4 si ARGB (RGB + transparence) utiliser 3
Exemple code Processing : // cre une image IplImage 8bits, 3 canaux (rgb) opencv_core.CvSize mySize=opencv_core.cvSize(widthIn,heightIn); // objet taille de l'image Buffer = opencv_core.cvCreateImage(mySize, opencv_core.IPL_DEPTH_8U, 3); // 3 canaux - RGB --

Opration sur les objets fondamentaux


opencv_core.cvCopy() Desc :

copie une image/matrice dans une autre


Javadoc Javacv :

static void

cvCopy(opencv_core.CvArr src, opencv_core.CvArr dst)

static void cvCopy(opencv_core.CvArr src, opencv_core.CvArr dst, opencv_core.CvArr mask)


Doc openCV :

http://opencv.itseez.com/modules/core/doc/old_basic_structures.html#copy
Paramtres :

> src : Image source - Peut tre l'une des sous classes CvArr suivante : opencv_core.CvMat, opencv_core.CvMatND, opencv_core.CvSeq, opencv_core.CvSparseMat, opencv_core.IplImage > dst : image destination - Peut tre l'une des sous classes CvArr suivante : opencv_core.CvMat, opencv_core.CvMatND, opencv_core.CvSeq, opencv_core.CvSparseMat, opencv_core.IplImage

attention : src et dst doivent avoir la mme taille, le mme nombre de canaux (nChannels) et tre codes sur le mme nombre de bits (depth)
Exemple code Processing : opencv_core.cvCopy(iplImgSrc, iplImgDest); //--- copie l'objet IplImage dans un autre objet IplImage --opencv_core.cvConvertScaleAbs() Desc :

convertit une image d'un nombre bit dans une image ayant un autre nombre de bits
Javacv :

static void cvConvertScaleAbs(opencv_core.CvArr src, opencv_core.CvArr dst, double scale, double shift)
Doc openCV :

http://opencv.itseez.com/modules/core/doc/old_basic_structures.html#convertscale
Paramtres :

> src : Image source - Peut tre l'une des sous classes CvArr suivante : opencv_core.CvMat, opencv_core.CvMatND, opencv_core.CvSeq, opencv_core.CvSparseMat, opencv_core.IplImage > dst : image destination - Peut tre l'une des sous classes CvArr suivante : opencv_core.CvMat, opencv_core.CvMatND, opencv_core.CvSeq, opencv_core.CvSparseMat, opencv_core.IplImage > scale : facteur d'chelle > shift : valeur ajouter chaque lment du tableau
Exemple code Processing : opencv_core.cvConvertScaleAbs(Trans,iplImgIn,1,0);

opencv_core.cvZero() ? Desc :

met 0 le tableau ?
Javadoc Javacv :

static void cvZero(opencv_core.CvArr arr)


Doc openCV :

Paramtres :

Renvoi :

Exemple code Processing :

Fonctions de dessin
opencv_core.cvDrawContours() Desc :

Trace dans une image le contour obtenu avec cvFindContour() (voir img_proc)
Javadoc Javacv :

static void cvDrawContours(opencv_core.CvArr img, opencv_core.CvSeq contour, opencv_core.CvScalar external_color, opencv_core.CvScalar hole_color, int max_level, int thickness, int line_type)
Doc openCV :

> http://opencv.willowgarage.com/documentation/c/core_drawing_functions.html#drawcontours + + > http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#dra wcontours


Paramtres :

> img : image destination > contour : Objet Seq correspondant une squence de points > color : scalaire couleur extrieur cr inline avec opencv_core.cvScalar(r,g,b) > hole_color : scalaire couleur intrieure cr inline avec opencv_core.cvScalar(r,g,b) > max_level : >> O : seulement le contour est dessin >> 1 : the contour and all contours following it on the same level are drawn >> 2 : all contours following and all contours one level below the contours are drawn >> -1 : he function does not draw the contours following after contour but draws the child contours of contour > thickness : paisseur de la ligne. Si valeur ngative utilise, contour intrieur dessin. Par ex : CV_FILLED > line_type : fixe la technique de trac de la ligne parmi : >> 8 : the 8-connected Bresenham algorithm >> 4 : the 4-connected Bresenham algorithm >> CV_AA antialiased line.
Renvoi :

rien.
Exemple code Processing : opencv_core.cvDrawContours(iplImgTraceContours, contour, opencv_core.CvScalar.BLUE, opencv_core.CvScalar.BLUE, -1, 1, opencv_core.CV_AA) ;

Pour un exemple complet, voir cvFindContours() (module imgproc)

Oprations sur les structures dynamiques


opencv_core. cvStartReadSeq()

Desc : Initialise la lecture des lments d'un objet CvSeq Javadoc Javacv : static void cvStartReadSeq(opencv_core.CvSeq seq, opencv_core.CvSeqReader reader, int reverse) Doc openCV : > http://opencv.willowgarage.com/documentation/c/core_dynamic_structures.html#startreadseq C > http://opencv.itseez.com/modules/core/doc/dynamic_structures.html#startreadseq 2.3.1 Paramtres : > seq : Objet CvSeq > reader : Objet reader cet objet est initialis par la fonction et peut donc simplement tre dclar avant. > reverse : sens de lecture : 0, se positionne au dbut, et 1 se positionne la fin... Renvoi : Autres fonctions associes : > opencv_core : static void CV_NEXT_SEQ_ELEM(int elem_size, opencv_core.CvSeqReader reader) : passe l'lment suivant de l'objet CvSeq > opencv_core : static void cvChangeSeqBlock(opencv_core.CvSeqReader reader, int direction) > opencv_core : static int cvGetSeqReaderPos(opencv_core.CvSeqReader reader) > opencv_core : static void cvSetSeqReaderPos(opencv_core.CvSeqReader reader, int index, int is_relative) Exemple code C :
CvMemStorage* storage = cvCreateMemStorage(0); CvSeq* seq = cvCreateSeq( CV_32SC1, sizeof(CvSeq), sizeof(int), storage ); CvSeqWriter writer; CvSeqReader reader; int i; cvStartAppendToSeq( seq, &writer ); for( i = 0; i < 10; i++ ) { int val = rand() CV_WRITE_SEQ_ELEM( val, writer ); printf(" } cvEndWriteSeq( &writer ); cvStartReadSeq( seq, &reader, 0 ); for( i = 0; i < seq->total; i++ )

{ int val; #if 1 CV_READ_SEQ_ELEM( val, reader ); printf(" #else /* alternative way, that is prefferable if sequence elements are large, or their size/type is unknown at compile time */ printf(" CV_NEXT_SEQ_ELEM( seq->elem_size, reader ); #endif } ... cvReleaseStorage( &storage );

Exemple code Processing :

opencv_core.ModeleFonction() Desc :

Javadoc Javacv :

Doc openCV :

Paramtres :

Renvoi :

Exemple code Processing :

(Mta) Classe opencv_core.CvArr


Prsentation :

Desc : mtatype utilis en tant que paramtre de fonction - classe dont dpend notamment IplImage Javadoc : http://www.mon-clubelec.fr/mes_docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_core.CvArr.html En pratique, on utilise les sous-classes de la classe CvArr . Un CvArr a les sous-classes suivantes :

opencv_core.CvMat, opencv_core.CvMatND, opencv_core.CvSeq, opencv_core.CvSparseMat, opencv_core.IplImage Lorsqu'une fonction reoit un CvArr, cela peut donc correspondre l'une ou l'autre de ces classes. A l'inverse, ces classes hritent des fonctions de CvArr (aucune en fait..)

Classe opencv_core.IplImage (sous classe de CvArr)


Prsentation :
Desc :

un objet IplImage reprsente une image = matrices (hauteur x largeur pixels) x 1 4 canaux/couleurs cods sur n bits signs ou non Plus exactement, c'est une entte associe une matrice image.
Javadoc :

http://www.mon-clubelec.fr/mes_docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_core.IplImage.html
Doc OpenCV :

http://opencv.itseez.com/modules/core/doc/old_basic_structures.html#IplImage
javacv : Fonctions propres essentielles :

> create() : cration d'un objet IplImage > cvSize() : taille de l'image sous forme d'un CvSize > depth() : nombre de bits de codage > nChannels() : nombre de canaux > width() : largeur de l'image > height() : hauteur de l'image > getBufferedImage() : copie l'image dans un objet BufferedImage (objet Java) > getByteBuffer() : copie les donnes de l'image dans un ByteBuffer (objet Java)
javacv : Fonctions importantes associes :

> opencv_core.cvCreateImage () : cration d'un objet IplImage

opencv_core.IplImage.create() Desc :

Cre un objet IplImage (conteneur d'image) en fixant les paramtres de taille, nombre de canaux et le codage en nombre de bits.
Javadoc Javacv :

static opencv_core.IplImage create(int width, int height, int depth, int channels) static opencv_core.IplImage create(int width, int height, int depth, int channels, int origin)

static opencv_core.IplImage create(opencv_core.CvSize size, int depth, int channels) static opencv_core.IplImage create(opencv_core.CvSize size, int depth, int channels, int origin)
Doc openCV :

http://opencv.itseez.com/modules/core/doc/old_basic_structures.html#createimage
Paramtres :

> width : largeur en pixels > height : hauteur en pixels > ou size (alternative) : la taille et la largeur peuvent tre fournies via un objet CvSize (structure 2 valeurs) - in line avec opencv_core.cvSize(val1,val2) > depth : nombre de bits utiliss pour coder l'image. Utiliser IPL_DEPTH_8U par dfaut (8 bits non signs : 0-255). Les champs suivants sont utilisables :

Voir ici pour les dtails : http://opencv.itseez.com/modules/core/doc/old_basic_structures.html#IplImage > channels : le nombre de canaux utiliss pour l'image (correspond en fait au nombre de matrices (widthxheight) utilises pour l'image) >> 1 pour une image en niveau de gris >> 3 pour une image RGB >> 4 pour une image ARGB (RGB + canal transparence) > origin : fixe le point 0,0 de l'image : >> 0 : origine dans le coin suprieur gauche >> 1 : origine dans le coin infrieur gauche
Renvoi :

> Un objet IplImage aux caractristiques voulues


Exemple code Processing : opencv_core.IplImage iplImgDest= opencv_core.cvCreateImage(mySize, opencv_core.IPL_DEPTH_8U, 3); // cre une image IplImage 8bits , 3 canaux opencv_core.IplImage.ModeleFonction() Desc :

Javadoc Javacv :

Doc openCV :

Paramtres :

Renvoi :

Exemple code Processing :

Classe opencv_core.CvMat (sous-classe de CvArr)


Prsentation

Desc : Reprsente un tableau nD de donnes Javadoc javacv : http://www.mon-clubelec.fr/mes_docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_core.CvMat.html Doc OpenCV : http://opencv.itseez.com/modules/core/doc/old_basic_structures.html#cvmat distinguer de : http://opencv.itseez.com/modules/core/doc/basic_structures.html#Mat (pas dispo avec javacv)
javacv : Fonctions propres essentielles :

javacv : Fonctions importants associes :

Classe opencv_core.CvMemStorage
Prsentation

Desc : Reprsente une objet de stockage de donnes croissance dynamique de type CvSeq et autres. Est constitu de CvMemBlock. Des blocs sont ajouts lorsque cela est ncessaire. Javadoc javacv : http://www.mon-clubelec.fr/mes_docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_core.CvMemStorage.ht ml Doc OpenCV : http://opencv.itseez.com/modules/core/doc/dynamic_structures.html#cvmemstorage

et aussi :
javacv : Fonctions propres essentielles :

> static opencv_core.CvMemStorage create()


javacv : Fonctions importants associes :

> static opencv_core.CvMemStorage cvCreateMemStorage(int block_size) : cration d'un CvMemStorage Initialiser 0 NB : s'initialise sous la forme : opencv_core.CvMemStorage storage= opencv_core.cvCreateMemStorage(0); // initialise objet conteneur CvMemStorage

Classe opencv_core.CvSeq (Sous-classe javacpp.Pointer. Javacvcpp.CvArr)


Prsentation

Desc : Reprsente une squence (tableau 1D) de croissance dynamique. Est constitu de CvBlock. Ne comporte aucun trou. Est stock dans CvMemStorage. Plusieurs sous classes : opencv_core.CvChain, opencv_core.CvContour, opencv_core.CvSet, opencv_legacy.CvContourTree Javadoc javacv : http://www.mon-clubelec.fr/mes_docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_core.CvSeq.html Doc OpenCV : http://opencv.itseez.com/modules/core/doc/dynamic_structures.html#cvseq et aussi : Un CvSeq est une squence de squences 1D (si je comprends bien...) et est caractris par : > flags : drapeau de squence qui fixe le type des lments de la squence. Cf http://www710.univ-lyon1.fr/~bouakaz/OpenCV0.9.5/docs/ref/OpenCVRef_BasicFuncs.htm#ch1_seqs : The field flags contain the particular dynamic type signature (CV_SEQ_MAGIC_VAL for dense sequences and CV_SET_MAGIC_VAL for sparse sequences) in the highest 16 bits and miscellaneous information about the sequence. The lowest CV_SEQ_ELTYPE_BITS bits contain the ID of the element type. Most of sequence processing functions do not use element type but element size stored in elem_size. If sequence contains the numeric data of one of CvMat type then the element type matches to the corresponding CvMat element type, e.g. CV_32SC2 may be used for sequence of 2D points, CV_32FC1 for sequences of floating-point values etc. CV_SEQ_ELTYPE(seq_header_ptr) macro retrieves the type of sequence elements. Processing function that work with numerical sequences check that elem_size is equal to the calculated from the type element size. Besides CvMat compatible types, there are few extra element types defined in cvtypes.h header: Standard Types of Sequence Elements

#define CV_SEQ_ELTYPE_POINT #define CV_SEQ_ELTYPE_CODE #define CV_SEQ_ELTYPE_GENERIC elements */ #define CV_SEQ_ELTYPE_PTR #define CV_SEQ_ELTYPE_PPOINT element of other sequence */ #define CV_SEQ_ELTYPE_INDEX some other sequence */ #define CV_SEQ_ELTYPE_GRAPH_EDGE &next_d, &vtx_o, &vtx_d */ #define CV_SEQ_ELTYPE_GRAPH_VERTEX &(x,y) */ #define CV_SEQ_ELTYPE_TRIAN_ATR binary tree */ #define CV_SEQ_ELTYPE_CONNECTED_COMP component */ #define CV_SEQ_ELTYPE_POINT3D

CV_32SC2 /* (x,y) */ CV_8UC1 /* freeman code: 0..7 */ 0 /* unspecified type of sequence CV_USRTYPE1 /* =6 */ CV_SEQ_ELTYPE_PTR /* &elem: pointer to CV_32SC1 /* #elem: index of element of /* &next_o, /* first_edge, /* vertex of the /* connected */

CV_SEQ_ELTYPE_GENERIC CV_SEQ_ELTYPE_GENERIC CV_SEQ_ELTYPE_GENERIC CV_SEQ_ELTYPE_GENERIC CV_32FC3 /* (x,y,z)

Voir aussi : http://www.mon-club-elec.fr/mes_docs/my_javacv_javadoc/constant-values.html > header_size : The field header_size contains the actual size of the sequence header and should be greater or equal to sizeof(CvSeq). Initialiser sizeof(CvSeq) > total : le nombre total d'lment de squences > h_prev, h_next, v_prev, v_ : pointers to another sequences in a sequence tree. Sequence trees are used to store hierarchical contour structures, retrieved by FindContours() The fields h_prev, h_next, v_prev, v_next can be used to create hierarchical structures from separate sequences. The fields h_prev and h_next point to the previous and the next sequences on the same hierarchical level while the fields v_prev and v_next point to the previous and the next sequence in the vertical direction, that is, parent and its first child. But these are just names and the pointers can be used in a different way.
javacv : Fonctions propres essentielles :

> .h_next() : passe au CvBlock suivant...


javacv : Fonctions importants associes :

> static opencv_core.CvSeq cvCreateSeq(int seq_flags, int header_size, int elem_size, opencv_core.CvMemStorage storage) Pour des dtails, voir : http://www710.univ-lyon1.fr/~bouakaz/OpenCV0.9.5/docs/ref/OpenCVRef_BasicFuncs.htm#ch1_seqs NB : Peut s'initialiser sous la forme : opencv_core.CvSeq contour = new opencv_core.CvSeq(null); // initialise objet CvSeq vide Dans le cas d'une recherche de contour, initialiser un objet CvSeq null : la fonction cvFindContours() /crera/remplira le CvSeq ;. NB2 : pour rcuprer le contenu d'un CvSeq, on peut utiliser cvGetSeqElem ou cvCvtSeqToArray > opencv_core.cvClearSeq(contour); // efface la squence courante (et pas toutes les squences) > cvCvtSeqToArray(opencv_core.CvSeq seq, com.googlecode.javacpp.Pointer elements, opencv_core.CvSlice slice) ?

Classe opencv_core.CvContour
Prsentation

Desc : Est une sous classe de CvSeq qui reprsente un contour. Javadoc javacv : http://www.mon-clubelec.fr/mes_docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_core.CvContour.html Doc OpenCV :
javacv : Fonctions propres essentielles :

javacv : Fonctions importants associes :

Classe opencv_core.CvSeqReader
Prsentation

Desc : Objet qui permet de lire l'objet SeqBlock courant d'un objet CvSeq Javadoc javacv : http://www.mon-clubelec.fr/mes_docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_core.CvSeqReader.html Doc OpenCV : Pas de doc propre : c'est la doc de CvStartReadSeq : http://opencv.itseez.com/modules/core/doc/dynamic_structures.html#startreadseq
javacv : Fonctions propres essentielles :

javacv : Fonctions importants associes :

> voir la fonction opencv_core.CvStartReadSeq

Classe opencv_core.CvSize
Prsentation

Desc : un objet CvSize est un ensemble de 2 valeurs entires reprsentant la taille d'un rectangle : la hauteur et la largeur. Javadoc :

http://www.mon-clubelec.fr/mes_docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_core.CvSize.html Doc OpenCV : http://opencv.itseez.com/modules/core/doc/old_basic_structures.html#cvsize


javacv : Fonctions propres essentielles :

mySize.height() : renvoie la valeur height mySize.height(int height) : fixe la valeur height mySize.width() : renvoie la valeur width mySize.width(int width) : fixe la valeur width
javacv : Fonctions importantes associes :

> static opencv_core.CvSize cvSize(int width, int height) : renvoie un objet CvSize correspondant aux 2 valeurs width et height NB : pour crer simplement un objet CvSize in line , on fera : opencore_cv.cvSize(largeur, hauteur)

Classe opencv_core.CvPoint
Prsentation

Desc : Coordonnes entire d'un point en 2 dimensions, habituellement 0 based (cd 1er point en 0,0) Javadoc : http://www.mon-clubelec.fr/mes_docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_core.CvPoint.html Doc OpenCV : http://opencv.itseez.com/modules/core/doc/old_basic_structures.html#cvpoint
javacv : Fonctions propres essentielles :

> void

set(int x, int y) : fixe les valeurs x,y

> .x() : renvoie x > .x(val) : fixe x > .y() : renvoie y > .y(val) : fixe y
javacv : Fonctions importantes associes :

> static opencv_core.CvPoint

opencv_core.cvPoint(int x, int y)

NB : pour crer simplement un objet CvSize in line , on fera : opencore_cv.cvPoint(x, y)

Classe opencv_core.CvScalar
Prsentation

Desc : Structure contenant 1 4 valeurs utilis pour dfinir les 3 canaux RGB d'un pixel. Javadoc javacv : http://www.mon-clubelec.fr/mes_docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_core.CvScalar.html Doc OpenCV : http://opencv.itseez.com/modules/core/doc/old_basic_structures.html#cvscalar
javacv : Fonctions propres essentielles :

> myScalar.blue() : renvoie la valeur bleu > myScalar.red() : renvoie la valeur rouge > myScalar.green() : renvoie la valeur green > myScalar.blue(val) :fixe la valeur bleu > myScalar.red(val) : fixe la valeur rouge > myScalar.green(val) : fixe la valeur green

javacv : Fonctions importants associes :

> static opencv_core.CvScalar cvScalar(double val0, double val1, double val2, double val3)

Classe opencv_core.modele
Prsentation

Desc : Javadoc javacv : Doc OpenCV :


javacv : Fonctions propres essentielles :

javacv : Fonctions importants associes :

Module opencv_imgproc : fonctions et classes de traitement d'image.


Javadoc : http://www.mon-clubelec.fr/mes_docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_imgproc.html

Fonctions propres essentielles/utiles opencv_imgproc


opencv_imgproc.cvCvtColor()

Desc : ralise un changement du mode du systme de couleur. Javadoc Javacv : static void cvCvtColor(opencv_core.CvArr src, opencv_core.CvArr dst, int code) Doc openCV : http://opencv.itseez.com/modules/imgproc/doc/miscellaneous_transformations.html#cvtcolor Paramtres : > src et dest : images source et destination Peut tre l'une des sous classes CvArr suivante : opencv_core.CvMat, opencv_core.CvMatND, opencv_core.CvSeq, opencv_core.CvSparseMat, opencv_core.IplImage - attention : l'image destination doit tre 1 canal si passage en niveau gris > code : dfinit la transformation . CV_RGB2GRAY pour niveau de gris. Exemple code Processing :
opencv_imgproc.cvCvtColor(Buffer, Buffer, opencv_imgproc.CV_RGB2GRAY) ; // bascule en niveaux de gris

Truc : pour transformer une image RGB en niveaux de gris, il suffit de raliser un cvCvtColor RGB2GRAY puis un GRAY2RGB en utilisant une image buffer 1 canal : on obtient ainsi une image en niveaux de gris 3 canaux.
opencv_imgproc.cvCvtColor(iplImgIn, BufferGray, opencv_imgproc.CV_RGB2GRAY); // bascule en niveaux de gris opencv_imgproc.cvCvtColor(BufferGray, iplImgIn, opencv_imgproc.CV_GRAY2RGB); // rebascule en RGB

opencv_imgproc.cvSmooth

Desc : applique un flou une image Javadoc Javacv : static void Doc openCV : http://opencv.itseez.com/modules/imgproc/doc/filtering.html#smooth Paramtres : src : image source - Peut tre l'une des sous classes CvArr suivante : opencv_core.CvMat, opencv_core.CvMatND, opencv_core.CvSeq, opencv_core.CvSparseMat, opencv_core.IplImage dst : image destination - Peut tre l'une des sous classes CvArr suivante : opencv_core.CvMat, opencv_core.CvMatND, opencv_core.CvSeq, opencv_core.CvSparseMat, opencv_core.IplImage smoothtype : fixe le type d'effet appliquer parmi > CV_BLUR_NO_SCALE > CV_BLUR > CV_GAUSSIAN ( utiliser) cvSmooth(opencv_core.CvArr src, opencv_core.CvArr dst, int smoothtype, int size1)

>CV_MEDIAN > CV_BILATERAL size1 : la taille du noyau de circonvolution utilis 3,5,7.. - 3 pour noyau 3x3 Exemple code Processing :
opencv_imgproc.cvSmooth(iplImgIn, iplImgIn, opencv_imgproc.CV_GAUSSIAN, 3); // applique un effet Flou gaussien - kernel 3x3

=> cette fonction serait obsolte (version 2.3.1)


opencv_imgproc.blur()

Description

Desc : Fonction appliquant un flou sur une image Javadoc Javacv : static void blur(opencv_core.CvArr src, opencv_core.CvArr dst, opencv_core.CvSize ksize, opencv_core.CvPoint anchor, int borderType) Doc openCV : http://opencv.itseez.com/modules/imgproc/doc/filtering.html#void%20blur%28InputArray%20src, %20OutputArray%20dst,%20Size%20ksize,%20Point%20anchor,%20int%20borderType%29 Paramtres : src : image source - Peut tre l'une des sous classes CvArr suivante : opencv_core.CvMat, opencv_core.CvMatND, opencv_core.CvSeq, opencv_core.CvSparseMat, opencv_core.IplImage dst : image destination - Peut tre l'une des sous classes CvArr suivante : opencv_core.CvMat, opencv_core.CvMatND, opencv_core.CvSeq, opencv_core.CvSparseMat, opencv_core.IplImage ksize : la taille du noyau de circonvolution (kernel) (CvSize est un ensemble de 2 valeurs) utiliser 3x3 cration inline avec opencv_core.cvSize(3,3) anchor : coordonnes du point de rfrence (le point central) dans le noyau kernel (-1,-1) par dfaut pour le centre (cf : The position of the anchor relative to its kernel. The location Point(-1, -1) indicates the center by default.) borderType : Type d'extrapolation utiliser pour les points en dehors de l'image utiliser BORDER_DEFAULT (voit aussi : http://www.mon-clubelec.fr/mes_docs/my_javacv_javadoc/constantvalues.html#com.googlecode.javacv.cpp.opencv_imgproc.BORDER_DEFAULT) Exemple code Processing :
opencv_imgproc.blur( iplImgSrcGray, iplImgSrcGray, opencv_core.cvSize(3,3), opencv_core.cvPoint(-1,-1), opencv_imgproc.BORDER_DEFAULT); // application d'un flou avec noyau 3x3

opencv_imgproc.cvSobel

Prsentation

Desc : Applique un filtre de Sobel de dtection de contour sur une image

Javadoc javacv : static void cvSobel(opencv_core.CvArr src, opencv_core.CvArr dst, int xorder, int yorder, int aperture_size) Doc OpenCV : http://opencv.itseez.com/modules/imgproc/doc/filtering.html#sobel Paramtres : > src et dst : Image source et destination - Peut tre l'une des sous classes CvArr suivante : opencv_core.CvMat, opencv_core.CvMatND, opencv_core.CvSeq, opencv_core.CvSparseMat, opencv_core.IplImage attention : l'image destination doit tre en 16bits signs (CV_16S) pour rebasculer en mode 8bits, utiliser opencv_core.cvConvertScaleAbs() > xorder et yorder : application du filtre vertical/horizontal 0 pas appliqu, 1 appliqu > aperture size : taille du noyau de circonvolution CV_CHARR pour application filtre SCHARR plus discriminant... Exemple code Processing :
opencv_imgproc.cvSobel(iplImgIn, iplImgOut, 1,1,3); // applique une dtection contour par filtre Sobel

opencv_imgproc.cvCanny()

Desc : Fonction avance de dtection de contours Javadoc Javacv : static void cvCanny(opencv_core.CvArr image, opencv_core.CvArr edges, double threshold1, double threshold2, int aperture_size) Doc openCV : http://opencv.itseez.com/modules/imgproc/doc/feature_detection.html#canny Paramtres : > image : image dans laquelle on doit dtecter des contours - Peut tre l'une des sous classes CvArr suivante : opencv_core.CvMat, opencv_core.CvMatND, opencv_core.CvSeq, opencv_core.CvSparseMat, opencv_core.IplImage Attention : doit tre une image 1 canal en 8 bits > edges : image destination du rsultat de la dtection - Peut tre l'une des sous classes CvArr suivante : opencv_core.CvMat, opencv_core.CvMatND, opencv_core.CvSeq, opencv_core.CvSparseMat, opencv_core.IplImage Attention : doit tre une image 1 canal en 8 bits et tre de la mme taille que l'image source. > thresold1 : valeur seuillage utilise par l'algorithme utiliser 100 > thresold2 : valeur seuillage utilise par l'algorithme utiliser 200 ou thresold1 x 2 > aperture_size : taille noyau utilis par le filtre sobel de l'algorithme utiliser 3 Exemple code Processing :

opencv_imgproc.cvCanny(iplImgSrcGray, iplImgSrcContours, coeffCanny, coeffCanny*2, 3);

ou
opencv_imgproc.cvCanny(iplImgSrcGray, iplImgSrcContours, 100, 100*2, 3);

Voir galement : > http://fr.wikipedia.org/wiki/Algorithme_de_Canny > http://en.wikipedia.org/wiki/Canny_edge_detector


opencv_imgproc.cvFindContours () Desc :

Fonction de dtection des contours dans une image 8 bits. La fonction cre un objet CvContour stock dans un CvMemStorage...
Javadoc Javacv :

static int cvFindContours(opencv_core.CvArr image, opencv_core.CvMemStorage storage, opencv_core.CvSeq first_contour, int header_size, int mode, int method)
Doc openCV :

> http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#fin dcontours > et http://opencv.willowgarage.com/documentation/c/imgproc_structural_analysis_and_shape_descript ors.html (version C) > http://opencv.willowgarage.com/documentation/structural_analysis_and_shape_descriptors.html#fi ndcontours (++) > et http://opencv.willowgarage.com/documentation/c/core_drawing_functions.html#drawcontours (exemple C)
Paramtres :

ATTENTION : L'image source est modifie par la fonction... > Image : l'image analyser. L'image doit tre 8 bits 1 canal. Les valeurs diffrentes de 0 sont traites 1 et 0 sinon. Considre comme une image binaire qui peut tre obtenur par plusieurs fonctions > storage : Objet CvMemStorage utilis pour le stockage dynamique > first_contour : Objet CvSeq correspondant au premier contour > header_size : nombre de contour retrouv. Donn par sizeOf(cvContour) ou sizeOf (CvChain) si mthode CvContour reprsenterait ainsi une squence de points > mode : contour pris en compte parmi : >> CV_RETR_EXTERNAL - retrives only the extreme outer contours >> CV_RETR_LIST - retrieves all of the contours and puts them in the list >> CV_RETR_CCOMP - retrieves all of the contours and organizes them into a two-level hierarchy: on the top level are the external boundaries of the components, on the second level are the boundaries of the holes

>> CV_RETR_TREE - retrieves all of the contours and reconstructs the full hierarchy of nested contours > method : mthode de dtection parmi : >> CV_CHAIN_CODE - outputs contours in the Freeman chain code. All other methods output polygons (sequences of vertices) >> CV_CHAIN_APPROX_NONE - translates all of the points from the chain code into points >> CV_CHAIN_APPROX_SIMPLE - compresses horizontal, vertical, and diagonal segments and leaves only their end points >> CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS - applies one of the flavors of the Teh-Chin chain approximation algorithm. >> CV_LINK_RUNS - uses a completely different contour retrieval algorithm by linking horizontal segments of 1s. Only the CV_RETR_LIST retrieval mode can be used with this method.
Valeur renvoye :

> int : nombre de contours dtects


Exemple code Processing : //----- dtection des contours ----//--- dclarations pralables --opencv_core.CvMemStorage storage= opencv_core.cvCreateMemStorage(0); // initialise objet conteneur CvMemStorage opencv_core.CvSeq contour = new opencv_core.CvSeq(null); // initialise objet CvSeq vide //--- dtection des contours --opencv_imgproc.cvFindContours(iplImgContours, storage, contour, Loader.sizeof(opencv_core.CvContour.class),opencv_imgproc.CV_RETR_LIST, opencv_imgproc.CV_CHAIN_APPROX_SIMPLE); // l'objet CvSeq contour contiendra une squence d'ensemble de points (1 squence pour le premier groupe de point, 1 squence pour le 2me, etc.. //--- trac des contours while (contour != null && !contour.isNull()) { // tant que contour existe et n'est pas null = tant qu'il y a un contour disponible if (contour.elem_size() > 0) { // si il y a au moins un lment dans la squence //--- simplification du trac - rduction du nombre de points de la squence //opencv_core.CvSeq points = opencv_imgproc.cvApproxPoly(contour, Loader.sizeof(opencv_core.CvContour.class),storage, opencv_imgproc.CV_POLY_APPROX_DP, opencv_imgproc.cvContourPerimeter(contour)*0.02, 0) ; // trac du contour courant opencv_core.cvDrawContours(iplImgTraceContours, contour, opencv_core.CvScalar.BLUE, opencv_core.CvScalar.BLUE, -1, 1, opencv_core.CV_AA); } // fin if contour = contour.h_next(); // passe la squence suivante } // fin while

Cette fonction est directement et logiquement couple avec la fonction cvDrawContour() (module core)

opencv_imgproc.cvApproxPoly() Desc :

Approximation d'une courbe par un polygone avec la prcision voulue


Javadoc Javacv :

static opencv_core.CvSeq cvApproxPoly(com.googlecode.javacpp.Pointer src_seq, int header_size, opencv_core.CvMemStorage storage, int method, double parameter, int parameter2)
Doc openCV :

http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#app roxpolydp
Paramtres :

Renvoie :

> Un objet CvSeq correspondant aux squences de point des contours dtects
Exemple code Processing :

opencv_imgproc.cvContourArea() Desc :

Renvoie l'aire d'un coutour


Javadoc Javacv :

static double cvContourArea(opencv_core.CvArr contour, opencv_core.CvSlice slice, int oriented)


Doc openCV :

http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#con tourarea
Paramtres :

> contour : Objet CvArr correspondant au contour. Typiquement un objet CvSeq renvoy par FindContours > slice : Objet CvSlice qui dfinit le mode de calcul. Utiliser par dfaut opencv_core.CV_WHOLE_SEQ > oriented : rsultat sign ou non - mettre 0 pour valeur absolue de l'aire, 1 pour rsultat sign (+ ou -)

Exemple code Processing : double area=0; area=opencv_imgproc.cvContourArea(contour, opencv_core.CV_WHOLE_SEQ, 0 ); println("Aire contour "+ nbContours+ " = " + area); // affiche valeur aire contour

opencv_imgproc.cvArcLength() Desc :

Calcule la longueur d'un arc, d'un contour


Javadoc Javacv :

static double cvArcLength(com.googlecode.javacpp.Pointer curve, opencv_core.CvSlice slice, int is_closed)


Doc openCV :

http://opencv.willowgarage.com/documentation/c/imgproc_structural_analysis_and_shape_descript ors.html#arclength
Paramtres :

> curve : ensemble de point reprsentant la courbe. Peut tre une squence obtenue par FindContours > slice : utiliser CV_WHOLE_SEQ > is_closed : 0 si la courbe n'est pas ferme, 1 si courbe est ferme, -1 si courbe est une squence.

Exemple code Processing : //--- longueur du contour courant --double longueur=0; longueur=opencv_imgproc.cvArcLength(contour, opencv_core.CV_WHOLE_SEQ, -1 ); println("Longueur contour "+ nbContours+ " = " + longueur); // affiche valeur aire contour opencv_imgproc.ModeleFonction() Desc :

Javadoc Javacv :

Doc openCV :

Paramtres :

Renvoi :

Exemple code Processing :

opencv_imgproc.cvResize() Desc :

Ralise la conversion d'un IplImage dans un IplImage de taille diffrente.


Javadoc Javacv :

static void cvResize(opencv_core.CvArr src, opencv_core.CvArr dst)

static void cvResize(opencv_core.CvArr src, opencv_core.CvArr dst, int interpolation)


Doc openCV :

> http://opencv.willowgarage.com/documentation/c/imgproc_geometric_image_transformations.html #resize (la version C - ++) > http://opencv.itseez.com/modules/imgproc/doc/geometric_transformations.html#resize


Paramtres :

> src > dst > interpolation : >> CV_INTER_NN nearest-neigbor interpolation >> CV_INTER_LINEAR bilinear interpolation (used by default) >> CV_INTER_AREA resampling using pixel area relation. It is the preferred method for image decimation that gives moire-free results. In terms of zooming it is similar to the CV_INTER_NN method >> CV_INTER_CUBIC bicubic interpolation

Renvoi :

Exemple code Processing :

Fonctions Classe opencv_imgproc.CvHistogram

Module opencv_highgui : fonctions et classes d'interface graphique et de gestion de fichier.


Javadoc : http://www.mon-clubelec.fr/mes_docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_highgui.html
opencv_highgui.cvLoadImage () Desc :

Charge une image dans un objet IplImage partir d'un fichier.


Javadoc Javacv :

static opencv_core.IplImage cvLoadImage(java.lang.String filename) static opencv_core.IplImage cvLoadImage(java.lang.String filename, int iscolor)

Doc openCV :

> Equivalent de la fonction native imread() : http://opencv.itseez.com/modules/highgui/doc/reading_and_writing_images_and_video.html#imrea d


Paramtres :

> filename : chemin du fichier image > iscolor : type d'image renvoye >> 1 : renvoie image RGB 3 canaux >> 0 : renvoie image en niveau de gris (1 canal ?) >> -1 : renvoie image dans son format d'origine
Renvoi :

> Objet IplImage ayant les caractristiques de l'image du fichier.


Exemple code Processing :

opencv_highgui.ModeleFonction() Desc :

Javadoc Javacv :

Doc openCV :

Paramtres :

Renvoi :

Exemple code Processing :

S-ar putea să vă placă și