Académique Documents
Professionnel Documents
Culture Documents
int tableau[100];
tableau[3]=5;
*(tableau+2)=4;
int* t=tableau;
Rappel : les pointeurs
CvMat Ma=cvMat(3,3,CV_32FC1);
CvMat *Mb=cvCloneMat(&Ma);
CvMat *Mc=cvCreateMat(3,3,CV_32FC1);
void cvAdd(CvMat*, CvMat*, CvMat*);
cvAdd(&Ma,Mb,Mc);
Class CvMat{
int rows; printf(‘’%lf’’,Ma.rows);
int cols; printf(‘’%lf’’,*Mb.cols);
int type;
float[] data.fl; printf(‘’%lf’’,*Mc.data.fl[0]);
} printf(‘’%lf’’,Mc->data.fl[0]);
Généralités
Codage des images comme les matrices
Un seul tableau (codage par défaut BGR)
Classe IPLImage (objet)
width
height
nChannels (en général 1 ou 3)
depth (Unsigned char 8bits jusqu’au Float 64)
imageData
Un premier programme
Déclaration
IplImage *im = cvCreateImage(cvSize(nl,nc),IPL_DEPTH_8U,1);
IplImage *gaussian = cvCreateImage(cvSize(nl,nc),IPL_DEPTH_8U,1);
Chargement et affichage
im = cvLoadImage(« Mon_image.jpg », 1);
cvNamedWindow(« Ma fenêtre », 1);
cvSmooth(im,gaussian,CV_BLUR,7,7);
cvShowImage (« Ma fenêtre », gaussian);
cvWaitKey(3000);
Libération
cvReleaseImage(&im);
Exemple convolution
Traitement séquence
Traitement d'un flux vidéo provenant
d'une webcam (détection des pixels à
dominantes rouges)
for(int i=0;i<frame->height;i++)
{
for(int j=0;j<(frame->width*frame->nChannels);j+=frame->nChannels)
{
frame->imageData[i*frame->widthStep+(j+0)]= 0;
frame->imageData[i*frame->widthStep+(j+1)]= 0;
frame->imageData[i*frame->widthStep+(j+2)]=255;
}
}
WebcamDEMO
Programme utilisant les MFC
Créer un projet MFCAppWizard (exe)
Dialog-based application. (OK/Cancel)
Création automatique de 4.cpp et 4.h
Ajouter les liens précédents.
Créer les boutons dans la fenêtre.
A chaque ajout d’un bouton une fonction est créée
Créer le fichier Demo.h
Compléter le fichier OpenCvDemoDlg.cpp
contenant les fonctions associées aux boutons.
Créer le fichier Demo.cpp
Classe image
class UneImage {
IplImage* img;
public:
UneImage(CString filename, bool display=TRUE){ //constructeur
img=cvLoadImage(filename);
if(display){
cvNamedWindow("Image Originale",1); //créer une fenêtre
cvShowImage("Image Originale",img); //afficher l'image dans la fenêtre
}
}
~UneImage(){ //destructeur
cvReleaseImage(&img);
}
void display(){
cvNamedWindow("Image Résultat",1);
cvShowImage("Image Résultat",img);
}
void process();
};
OpenCvDemoDlg.cpp
Le fichier Dlg contient la classe fenêtre.
Inclure les fichiers:
Demo.h contenant la classe UneImage.
cv.h,cvaux.h,highgui.h
Compléter les fonctions associées aux
boutons
OnOpen
OnProcess
OpenCvDemoDlg.cpp
void COpenCVDemoDlg::OnOpen()
{
// TODO: Add your control notification handler code here
UneImage *image=0;
void UneImage::process()
{
IplImage* image = reinterpret_cast<IplImage*>(img);
IplImage* color = cvCreateImage(cvSize(image->width,image->height), IPL_DEPTH_8U , 3);
IplImage* gray = cvCreateImage(cvSize(image->width,image->height), IPL_DEPTH_8U , 1);
IplImage* laplace = cvCreateImage(cvSize(image->width,image->height), IPL_DEPTH_16S, 1);