Vous êtes sur la page 1sur 25

Ma doc OpenCV / Javacv / Javacpp

Par X. HNAULT – www.mon-club-elec.fr – Sept 2011 – Tous droits réservés – Licence GPLv3

Remarques générales :

> La plupart des fonctions javacv implémentant 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 utilisées dans une fonction recevant cette classe. Par exemple, une fonction acceptant un CvArr peut recevoir indifféremment 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 même façon que la librairie OpenCV elle-même 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, sont des sous-classes de javacpp.Pointer ( attention, pas javacv.cpp !), javacpp étant la librairie

>

etc

d'interface C/C++ => Java. Ainsi, toutes les classes sont potentiellement utilisables avec les fonctions (ou méthodes) recevant un objet Pointer.

> A noter aussi un (méta-)classe opencv_contrib qui comporte des classes à priori intéressantes à

tester : cf détecteur peau (skin) ou encore la méta-classe feature 2D qui comporte des fonctions

intéressante (cf SimpleBlobDetector) ou legacy (détection de blob

)

Vue d'ensemble simplifiée de la librairie javacv.cpp / articulation avec javacpp

Doc générale OpenCV : http://opencv.itseez.com/index.html

> La librairie javacv dispose de plusieurs centaines voire milliers de fonctions : le but ici est de répertorier 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 développées ici, car Processing fournit ses propres fonctions d'affichages qui sont ici privilégiées, de même que les fonctions de dessins. On se concentre ici sur les fonctions de

traitement d'image avancé qui ne sont pas disponible dans Processing.

glecode.javacv.cpp.opencv_core

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

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

FONCTIONS DISPONIBLES

ée un objet IplImage

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

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

race les contours à partir du résultat de la fonction cvFindContours

ecode.javacv.cpp.opencv_imgproc

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

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

FONCTIONS DISPONIBLES

age

e formes

et

ecode.javacv.cpp.opencv_highgui

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

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

FONCTIONS DISPONIBLES

rge une image dans un IplImage à partir d'un fichier

code.javacv.cpp.opencv_features2d

com.googlecode.javacpp.Pointer

|

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

|

|

|

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

|

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

|

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

|

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

|

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

|

.create() -

|-----

|

s 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

lecode.javacv.cpp.opencv_video

onctions et classes d'analyse vidéo. cv.itseez.com/modules/video/doc/video.html

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

ecode.javacv.cpp.opencv_calib3d

ses de calibration de caméra et reconstruction 3D

.itseez.com/modules/calib3d/doc/calib3d.html

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

code.javacv.cpp.opencv_objdetect

classes de détection d'objet (cascade classifier) seez.com/modules/objdetect/doc/objdetect.html

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

oglecode.javacv.cpp.opencv_ml

ons et classes d'apprentissage machine encv.itseez.com/modules/ml/doc/ml.html

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

glecode.javacv.cpp.opencv_flann

ses 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 ?

lecode.javacv.cpp.opencv_legacy

lasses de détection de contour ? Lib interne ?

ecode.javacv.cpp.opencv_contrib

ions et classes de détection de contour

Module opencv_core : fonctions et classes de base.

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

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 création de la forme

createObjet (createImage, createCvMemBlock, …)

Création / Déclaration des objets fondamentaux

opencv_core.cvCreateImage ()

Desc :

Crée une IplImage en créant l'entête (header) et la matrice associée. (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

Paramètres :

> 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, signés ou non. Plusieurs champs prédéfinis

possibles CV_8U, CV_16S, etc

http://opencv.itseez.com/modules/core/doc/old_basic_structures.html#IplImage NB : faire précéder le nom du champ par opencv_core.

> channels : le nombre de canaux utilisés pour l'image. 3 si RGB simple, 1 si niveaux de gris, 4 si ARGB (RGB + transparence) – utiliser 3

ou IPL_DEPTH_8U voir :

Exemple code Processing :

// crée 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 --

Opération sur les objets fondamentaux

opencv_core.cvCopy()

Desc :

copie une image/matrice dans une autre

Javadoc Javacv :

static void

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

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

Doc openCV :

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

Paramètres :

> 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 même taille, le même nombre de canaux (nChannels) et être codées sur le même 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

Paramètres :

> 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 élément 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 :

Doc openCV : Paramètres : Renvoi :

Paramètres :

Doc openCV : Paramètres : Renvoi :

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

Paramètres :

> img : image destination

> contour : Objet Seq correspondant à une séquence de points

> color : scalaire couleur extérieur – créé « inline » avec opencv_core.cvScalar(r,g,b)

> hole_color : scalaire couleur intérieure – 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 négative utilisée, contour intérieur 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)

Opérations sur les structures dynamiques

opencv_core. cvStartReadSeq()

Desc :

Initialise la lecture des éléments 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

Paramètres :

> seq : Objet CvSeq

> reader : Objet reader – cet objet est initialisé par la fonction et peut donc simplement être déclaré avant.

> reverse : sens de lecture : 0, se positionne au début, et 1 se positionne à la fin

Renvoi :

Autres fonctions associées :

> opencv_core : static void CV_NEXT_SEQ_ELEM(int elem_size,

opencv_core.CvSeqReader reader) : passe à l'élément 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 :

Doc openCV : Paramètres : Renvoi :

Paramètres :

Doc openCV : Paramètres : Renvoi :

Renvoi :

Exemple code Processing :

(Méta) Classe opencv_core.CvArr

Présentation :

Desc :

« métatype » utilisé en tant que paramètre de fonction - classe dont dépend notamment IplImage

Javadoc :

http://www.mon-club-

elec.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 reçoit un CvArr, cela peut donc correspondre à l'une ou l'autre de ces classes.

A l'inverse, ces classes héritent des fonctions de CvArr (aucune en fait )

Classe opencv_core.IplImage (sous classe de CvArr)

Présentation :

Desc :

un objet IplImage représente une image = matrices (hauteur x largeur pixels) x 1 à 4 canaux/couleurs codés sur n bits signés ou non – Plus exactement, c'est une entête associée à une matrice image.

Javadoc :

http://www.mon-club-

elec.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() : création 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 données de l'image dans un ByteBuffer (objet Java)

javacv : Fonctions importantes associées :

> opencv_core.cvCreateImage () : création d'un objet IplImage

opencv_core.IplImage.create()

Desc :

Crée un objet IplImage (conteneur d'image) en fixant les paramètres de taille, nombre de canaux et

le codage en nombre de bits.

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

Paramètres :

> 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 utilisés pour coder l'image. Utiliser IPL_DEPTH_8U par défaut (8 bits non signés : 0-255). Les champs suivants sont utilisables :

non signés : 0-255). Les champs suivants sont utilisables : Voir ici pour les détails :

Voir ici pour les détails :

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

> channels : le nombre de canaux utilisés pour l'image (correspond en fait au nombre de matrices (widthxheight) utilisées 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 supérieur gauche

>> 1 : origine dans le coin inférieur gauche

Renvoi :

> Un objet IplImage aux caractéristiques voulues

Exemple code Processing :

opencv_core.IplImage iplImgDest= opencv_core.cvCreateImage(mySize, opencv_core.IPL_DEPTH_8U, 3); // crée une image IplImage 8bits , 3 canaux

opencv_core.IplImage.ModeleFonction()

Desc :

Doc openCV :

Paramètres :

Renvoi :

Exemple code Processing :

Classe opencv_core.CvMat (sous-classe de CvArr)

Présentation

Desc :

Représente un tableau nD de données

Javadoc javacv :

http://www.mon-club-

elec.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 associées :

Classe opencv_core.CvMemStorage

Présentation

Desc :

Représente une objet de stockage de données à croissance dynamique de type CvSeq et autres. Est constitué de CvMemBlock. Des blocs sont ajoutés lorsque cela est nécessaire.

Javadoc javacv :

http://www.mon-club-

elec.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 associées :

> static opencv_core.CvMemStorage cvCreateMemStorage(int block_size) : création d'un CvMemStorage – Initialiser à 0

NB : s'initialise sous la forme :

opencv_core.cvCreateMemStorage(0); // initialise objet conteneur CvMemStorage

opencv_core.CvMemStorage storage=

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

Présentation

Desc :

Représente une séquence (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-club-

elec.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 « séquence » de séquences 1D (si je comprends bien

> flags : drapeau de séquence qui fixe le type des éléments de la séquence.

Cf http://www710.univ-lyon1.fr/~bouakaz/OpenCV- 0.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

)

et est caractérisé par :

#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 CV_SEQ_ELTYPE_GENERIC /* connected component */

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

CV_SEQ_ELTYPE_GENERIC /* &next_o,

CV_SEQ_ELTYPE_GENERIC /* first_edge,

CV_SEQ_ELTYPE_GENERIC /* vertex of the

*/

#define CV_SEQ_ELTYPE_POINT3D

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'élément de séquences

> 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 associées :

> static opencv_core.CvSeq cvCreateSeq(int seq_flags, int header_size, int elem_size, opencv_core.CvMemStorage storage)

Pour des détails, voir : http://www710.univ-lyon1.fr/~bouakaz/OpenCV-

0.9.5/docs/ref/OpenCVRef_BasicFuncs.htm#ch1_seqs

NB : Peut s'initialiser sous la forme :

opencv_core.CvSeq(null); // initialise objet CvSeq vide

Dans le cas d'une recherche de contour, initialiser un objet CvSeq null : la fonction cvFindContours() /créera/remplira le CvSeq ;.

NB2 : pour récupérer le contenu d'un CvSeq, on peut utiliser cvGetSeqElem ou cvCvtSeqToArray

opencv_core.CvSeq contour = new

> opencv_core.cvClearSeq(contour); // efface la séquence courante (et pas toutes les séquences)

> cvCvtSeqToArray(opencv_core.CvSeq seq, com.googlecode.javacpp.Pointer elements, opencv_core.CvSlice slice) ?

Classe opencv_core.CvContour

Présentation

Desc :

Est une sous classe de CvSeq qui représente un contour.

Javadoc javacv :

http://www.mon-club-

elec.fr/mes_docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_core.CvContour.html

Doc OpenCV :

javacv : Fonctions propres essentielles :

javacv : Fonctions importants associées :

Classe opencv_core.CvSeqReader

Présentation

Desc :

Objet qui permet de lire l'objet SeqBlock courant d'un objet CvSeq

Javadoc javacv :

http://www.mon-club-

elec.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 associées :

> voir la fonction opencv_core.CvStartReadSeq

Classe opencv_core.CvSize

Présentation

Desc :

un objet CvSize est un ensemble de 2 valeurs entières représentant la taille d'un rectangle : la hauteur et la largeur.

Javadoc :

http://www.mon-club-

elec.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 associées :

> static opencv_core.CvSize cvSize(int width, int height) : renvoie un objet CvSize correspondant aux 2 valeurs width et height

NB : pour créer simplement un objet CvSize « in line », on fera : opencore_cv.cvSize(largeur, hauteur)

Classe opencv_core.CvPoint

Présentation

Desc :

Coordonnées entière d'un point en 2 dimensions, habituellement « 0 based » (càd 1er point en 0,0)

Javadoc :

http://www.mon-club-

elec.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

> .x() : renvoie x

> .x(val) : fixe x

> .y() : renvoie y

> .y(val) : fixe y

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

javacv : Fonctions importantes associées :

> static opencv_core.CvPoint

NB : pour créer simplement un objet CvSize « in line », on fera : opencore_cv.cvPoint(x, y)

opencv_core.cvPoint(int x, int y)

Classe opencv_core.CvScalar

Présentation

Desc :

Structure contenant 1 à 4 valeurs – utilisé pour définir les 3 canaux RGB d'un pixel.

Javadoc javacv :

http://www.mon-club-

elec.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 associées :

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

Classe opencv_core.modele

Présentation

Desc :

Javadoc javacv :

Doc OpenCV :

javacv : Fonctions propres essentielles :

javacv : Fonctions importants associées :

Fonctions propres essentielles/utiles opencv_imgproc

opencv_imgproc.cvCvtColor()

Desc :

réalise un changement du mode du système 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

Paramètres :

> 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 : définit 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 réaliser 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

cvSmooth(opencv_core.CvArr src, opencv_core.CvArr dst, int smoothtype, int size1)

Doc openCV :

http://opencv.itseez.com/modules/imgproc/doc/filtering.html#smooth

Paramètres :

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)

>CV_MEDIAN

> CV_BILATERAL

size1 : la taille du noyau de circonvolution utilisé – 3,5,7

Exemple code Processing :

- 3 pour noyau 3x3

opencv_imgproc.cvSmooth(iplImgIn, iplImgIn, opencv_imgproc.CV_GAUSSIAN, 3); // applique un effet Flou gaussien - kernel 3x3

=> cette fonction serait obsolète (version 2.3.1)

opencv_imgproc.blur()

Description

Desc :

Fonction appliquant un flou sur une image

Javadoc Javacv :

static void

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

Paramètres :

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 – création « inline » avec opencv_core.cvSize(3,3)

anchor : coordonnées du point de référence (le point central) dans le noyau kernel (-1,-1) par défaut 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-club-

elec.fr/mes_docs/my_javacv_javadoc/constant-

values.html#com.googlecode.javacv.cpp.opencv_imgproc.BORDER_DEFAULT)

Exemple code Processing :

blur(opencv_core.CvArr src, opencv_core.CvArr dst, opencv_core.CvSize ksize,

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

Présentation

Desc :

Applique un filtre de Sobel de détection 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

Paramètres :

> 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 signés (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 détection contour par filtre Sobel

opencv_imgproc.cvCanny()

Desc :

Fonction avancée de détection de contours

Javadoc Javacv :

static void

double threshold2, int aperture_size)

Doc openCV :

http://opencv.itseez.com/modules/imgproc/doc/feature_detection.html#canny

Paramètres :

> image : image dans laquelle on doit détecter 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 résultat de la détection - 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 même taille que l'image source.

> thresold1 : valeur seuillage utilisée par l'algorithme – utiliser 100

> thresold2 : valeur seuillage utilisée par l'algorithme – utiliser 200 ou thresold1 x 2

> aperture_size : taille noyau utilisé par le filtre sobel de l'algorithme – utiliser à 3

cvCanny(opencv_core.CvArr image, opencv_core.CvArr edges, double threshold1,

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 détection des contours dans une image 8 bits. La fonction crée un objet CvContour stocké dans un CvMemStorage

Javadoc Javacv :

static int

opencv_core.CvSeq first_contour, int header_size, int mode, int method)

cvFindContours(opencv_core.CvArr image, opencv_core.CvMemStorage storage,

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)

Paramètres :

ATTENTION : L'image source est modifiée par la fonction

> Image : l'image à analyser. L'image doit être 8 bits – 1 canal. Les valeurs différentes de 0 sont traitées à 1 et à 0 sinon. Considérée 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 méthode CvContour représenterait ainsi une séquence 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 : méthode de détection 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 1’s. Only the CV_RETR_LIST retrieval mode can be used with this method.

Valeur renvoyée :

> int : nombre de contours détectés

Exemple code Processing :

//----- détection des contours -----

//--- déclarations préalables --- 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

//--- détection 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 séquence d'ensemble de points (1 séquence pour le premier groupe de point, 1 séquence pour le 2ème, 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 élément dans la séquence

//--- simplification du tracé - réduction du nombre de points de la séquence //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 séquence suivante

} // fin while

Cette fonction est directement et logiquement couplée avec la fonction cvDrawContour() (module core)

opencv_imgproc.cvApproxPoly()

Desc :

Approximation d'une courbe par un polygone avec la précision 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

Paramètres :

Renvoie :

> Un objet CvSeq correspondant aux séquences de point des contours détectés

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

Paramètres :

> contour : Objet CvArr correspondant au contour. Typiquement un objet CvSeq renvoyé par FindContours

> slice : Objet CvSlice qui définit le mode de calcul. Utiliser par défaut opencv_core.CV_WHOLE_SEQ

> oriented : résultat signé ou non - mettre à 0 pour valeur absolue de l'aire, à 1 pour résultat 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

Paramètres :

> curve : ensemble de point représentant la courbe. Peut être une séquence obtenue par FindContours

> slice : utiliser CV_WHOLE_SEQ

> is_closed : 0 si la courbe n'est pas fermée, 1 si courbe est fermée, -1 si courbe est une séquence.

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 :

Doc openCV : Paramètres : Renvoi :

Paramètres :

Doc openCV : Paramètres : Renvoi :

Renvoi :

Exemple code Processing :

opencv_imgproc.cvResize()

Desc :

Réalise la conversion d'un IplImage dans un IplImage de taille différente.

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

Paramètres :

> 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-club- elec.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

Paramètres :

> filename : chemin du fichier image

> iscolor : type d'image renvoyée

>> 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 caractéristiques de l'image du fichier.

Exemple code Processing :

opencv_highgui.ModeleFonction()

Desc :

Javadoc Javacv :

Doc openCV :

Doc openCV : Paramètres : Renvoi :

Paramètres :

Doc openCV : Paramètres : Renvoi :

Renvoi :

Exemple code Processing :