bonjour,je suis débutant en builder c++ , je veux savoir comment faire la lecteur d'une image et l'affichage c-a-d (l'affichage de l'image original et l'image résultat) .merci
Version imprimable
bonjour,je suis débutant en builder c++ , je veux savoir comment faire la lecteur d'une image et l'affichage c-a-d (l'affichage de l'image original et l'image résultat) .merci
Image ? BMP ? JPEG ?
Composant TImage, TBitmap, TPicture, TCanvas
Voir l'exemple FishFactory fourni dans les Démos du RAD Studio !
:f1:
Bonne Lecture !
merci,mon probléme maintenant c'est la téléchargement des images .tif et .jpg
avec le code suivant je peux téléchargé que les images format bmp!
Code:
1
2 if (OpenPictureDialog1->Execute()) Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
téléchargement ???
tu veux dire chargement !
LoadFromFile gère un système de fichier windows (local ou réseau), on ne peut pas parler de téléchargement comme avec des protocoles FTP ou HTTP !
Pour le TPicture, il gère plusieurs formats nativement mais cela dépend de la version de C++Builder
A partir de 2009, le TIFF doit être géré, ainsi que le JPEG
En C++Builder 6, tu peux utiliser le TJPEGImage, tu as plein d'exemple d'utilisation
plutôt chargement merci bien
comment appliqué cette programme sur une image sous builder c++.
je suis débutant en builder et c'est premier fois que j'utilise builder en traitement d'image aide moi svp.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 /* otsu_th.c */ #include <stdio.h> #include <stdlib.h> #include <math.h> #include "mypgm.h" void otsu_th( ) /* binarization by Otsu's method based on maximization of inter-class variance */ { int hist[GRAYLEVEL]; double prob[GRAYLEVEL], omega[GRAYLEVEL]; /* prob of graylevels */ double myu[GRAYLEVEL]; /* mean value for separation */ double max_sigma, sigma[GRAYLEVEL]; /* inter-class variance */ int i, x, y; /* Loop variable */ int threshold; /* threshold for binarization */ printf("Otsu's binarization process starts now.\n"); /* Histogram generation */ for (i = 0; i < GRAYLEVEL; i++) hist[i] = 0; for (y = 0; y < y_size1; y++) for (x = 0; x < x_size1; x++) { hist[image1[y][x]]++; } /* calculation of probability density */ for ( i = 0; i < GRAYLEVEL; i ++ ) { prob[i] = (double)hist[i] / (x_size1 * y_size1); } /* omega & myu generation */ omega[0] = prob[0]; myu[0] = 0.0; /* 0.0 times prob[0] equals zero */ for (i = 1; i < GRAYLEVEL; i++) { omega[i] = omega[i-1] + prob[i]; myu[i] = myu[i-1] + i*prob[i]; } /* sigma maximization sigma stands for inter-class variance and determines optimal threshold value */ threshold = 0; max_sigma = 0.0; for (i = 0; i < GRAYLEVEL-1; i++) { if (omega[i] != 0.0 && omega[i] != 1.0) sigma[i] = pow(myu[GRAYLEVEL-1]*omega[i] - myu[i], 2) / (omega[i]*(1.0 - omega[i])); else sigma[i] = 0.0; if (sigma[i] > max_sigma) { max_sigma = sigma[i]; threshold = i; } } printf("\nthreshold value = %d\n", threshold); /* binarization output into image2 */ x_size2 = x_size1; y_size2 = y_size1; for (y = 0; y < y_size2; y++) for (x = 0; x < x_size2; x++) if (image1[y][x] > threshold) image2[y][x] = MAX_BRIGHTNESS; else image2[y][x] = 0; } main( ) { load_image_data( ); /* input image1 */ otsu_th( ); /* Otsu's binarization method is applied */ save_image_data( ); /* output image2 */ return 0; }
je veux convertir l'image original au image binaire avec builder c++et bien sur l'affichage de résultat sur une fenêtre, et limage original dans une autre fenêtre .
D'accord,
et bien c'est facile de le faire sans pour autant passer par des trucs complexes...
pour binariser une image t'aurad besoin d'un seuil (threshold), tu parcour la matrice de ton image pixel par pixel, et tu teste: si la valeur rgb est supperieur à se threshold alors tu poses: valeur_pixel(i,j)=1, else valeur_pixel(i,j)=0.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 int Threshold=50; // exemple de seuil, a toi de voir pour cette valeur.... for(int i=0;i<Bitmap->Height ; i++) for(int j=0;j<Bitmap->Width;j++) {{ if(Image->Canvas->Pixels[i][j]>= Threshold)Image->Canvas->Pixels[i][j]=1; else Image->Canvas->Pixels[i][j]=0; }} //----fin binarisation //sinon pour l'affichage sur la 2° fenêtre c'est facile aussi, il suffit de de sauvegarder l'image binariser et la réouvrire dans la nouvelle fenetre ou de nommer un autre objet image dynamique...
oh c'est tout! je pensais que builder comme le c 100%
est ce que tu a un document sur la programmation de builder c++ dans le traitement d'image?svp aidez moi.
j'ai comme un projet de fin d'étude identification par empreinte digitals avec builder c++ et je suis perdu.
T'auras pas besoin de Builder pour faire le traitement d'image mais plutot des librairies comme ImageMAgick ou Opencv. C'est plus facile.
et ce que t'as essayé l'exemple de binarisation?
Sinon concernant la reconnaissance d'empreinte, c'est le modèl statistique qui se fait derière qui doit être préparer car l'étape de binarisation doit être fait a priori, pour que le modèl à HMM ou réseaux de neuronnes reçoit l'image binariée pour la traiter....
Par contre, je croyait les images des empreintes sont déja binarisées? je me trompe?
oui j'ai essayé il y a des erreurs
je travail avec les algorithmes génétique je ne travail pas avec les réseau de neurone .Code:
1
2
3 [C++ Warning] Unit1.cpp(36): W8004 'Threshold' is assigned a value that is never used [C++ Error] Unit1.cpp(32): E2451 Undefined symbol 'Image' [C++ Error] Unit1.cpp(29): E2451 Undefined symbol 'Bitmap'
l'image d'empreinte en niveau de gris.
Bien sur, je l'ai fait à titre illustratif;
Poses un objet TImage sur ta forme, et essayes se code la
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 TPicture * pict = new TPicture; Graphics::TBitmap *bmpPicture = new Graphics::TBitmap; bmpPicture->LoadFromFile(L"C:\\f.bmp"); pict->Bitmap = bmpPicture; Image1->Picture = pict; Image1->Width=pct->Bitmap->Width; Image1->Height=pct->Bitmap->Height; int Threshold=240*240*240; // exemple de seuil, a toi de voir pour cette valeur.... for(int i=0;i<Image1->Height; i++) for(int j=0;j<Image1->Width;j++) {{ if(Image1->Canvas->Pixels[i][j]>= Threshold)Image1->Canvas->Pixels[i][j]=255*255*255; else Image1->Canvas->Pixels[i][j]=0; }}
Remarque: c'est un petit exemple, à toi de voir concernant le threshold ou le type du canal utilisé si c'est RGB, sinon si c'est niveau de gris, le threshold doit être entre zero et 255....
Merci bien pour tes efforts,il y a erreur aussi!
Code:
1
2
3 [C++ Error] Unit1.cpp(35): E2451 Undefined symbol 'pct' [C++ Warning] Unit1.cpp(42): W8018 Assigning int to TColor [C++ Warning] Unit1.cpp(43): W8018 Assigning int to TColor
merci bien , il reste maintenant l'affichage de résultat , désolé j'ai posé beaucoup des questions peut être bêtes , merci encore pour tes éffort
ok merci beaucoup
@dz_robotix
comment utiliser la bibliothèque opencv et comment l'intégrer et builder ?
@hanou88,
Les démarches que tu avais mentioné sont ceux que j'utilise régulièrement pour inclure opencv sous bcb.
dans les répertoire include de ton projet :
1** dans Project/ options / Directories (répertoires)/ Include path : tu ajoutes les répertoires des includes d'opencv qui sont : opencv/cv/include ; opencv/cvaux/include; cxcore/include; otherlibs/_graphics/include; otherlibs/cvcam/include/ ; opencv/otherlibs/higgui
apresè tu cliques OK
2** maintenant toujours dans ka fenaitre directories dans les options du projets, va sur Library path, clique sur parcourir et ajoutes: Opencv/bin, opencv/otherlibs/_graphics/lib; opencv/lib
clique sur OK.
3° étape: sur l'interface principal du builder, il y a le bouton ajouter au projet, ici ajoutes: les librairies suivantes: cv.lib ; cvcam.lib; cxcore.lib; highgui.lib
NB: j'utilise pas opencv v2 car je la trouve un peu :aie:.
n'hésites pas à écrire si tu as des prob.
@dz_robotix
salut j'ai pas trouver opencv/otherlibs/_graphics/lib;+j'utilise OpenCV-2.1.0
Un lien où on a abordé se problème: http://www.developpez.net/forums/d90...tion-contours/
merci c bn j'ai installer la version 0.9.7.
maintenant le problème est comment utiliser la bibliothèque opencv dans le traitement d'image?(binarisation , filtrage, squelettisation):cry:
En ajoutant les includes dans le .H
#include <cv.h>
#include <cvaux.h>
#include <cxcore.h>
#include <highgui.h>
#include <cvcam.h>
Un exemple pour Commencer
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 IplImage* laplace = 0; IplImage* colorlaplace = 0; IplImage* planes[3] = { 0, 0, 0 }; CvCapture* capture = 0; char* c="C:\\video.avi" ; capture = cvCaptureFromAVI( c); //--si tu veux utiliser une webcam : // capture = cvCaptureFromCAM if( !capture ) { fprintf(stderr,"OOps walou...\n"); return ; } cvNamedWindow( "Exemple Filtrage", 0 ); for(;;) { IplImage* frame = 0; int i; frame = cvQueryFrame( capture ); if( !frame ) break; if( !laplace ) { for( i = 0; i < 3; i++ ) planes[i] = cvCreateImage( cvSize(frame->width,frame->height), 8, 1 ); laplace = cvCreateImage( cvSize(frame->width,frame->height), IPL_DEPTH_16S, 1 ); colorlaplace = cvCreateImage( cvSize(frame->width,frame->height), 8, 3 ); } cvCvtPixToPlane( frame, planes[0], planes[1], planes[2], 0 ); for( i = 0; i < 3; i++ ) { cvLaplace( planes[i], laplace, 3 ); cvConvertScaleAbs( laplace, planes[i], 1, 0 ); } cvCvtPlaneToPix( planes[0], planes[1], planes[2], 0, colorlaplace ); colorlaplace->origin = frame->origin; cvShowImage("Exemple Filtrage", colorlaplace ); if( cvWaitKey(10) >= 0 ) break; } cvReleaseCapture( &capture ); cvDestroyWindow("Exemple Filtrage");
salut,
j'ai pas bien compris ce code , et comment je l'appliquer sur l'image d'empreinte?!
[/QUOTE]Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 IplImage* laplace = 0; IplImage* colorlaplace = 0; IplImage* planes[3] = { 0, 0, 0 }; CvCapture* capture = 0; char* c="C:\\video.avi" ; capture = cvCaptureFromAVI( c); //--si tu veux utiliser une webcam : // capture = cvCaptureFromCAM if( !capture ) { fprintf(stderr,"OOps walou...\n"); return ; } cvNamedWindow( "Exemple Filtrage", 0 ); for(;;) { IplImage* frame = 0; int i; frame = cvQueryFrame( capture ); if( !frame ) break; if( !laplace ) { for( i = 0; i < 3; i++ ) planes[i] = cvCreateImage( cvSize(frame->width,frame->height), 8, 1 ); laplace = cvCreateImage( cvSize(frame->width,frame->height), IPL_DEPTH_16S, 1 ); colorlaplace = cvCreateImage( cvSize(frame->width,frame->height), 8, 3 ); } cvCvtPixToPlane( frame, planes[0], planes[1], planes[2], 0 ); for( i = 0; i < 3; i++ ) { cvLaplace( planes[i], laplace, 3 ); cvConvertScaleAbs( laplace, planes[i], 1, 0 ); } cvCvtPlaneToPix( planes[0], planes[1], planes[2], 0, colorlaplace ); colorlaplace->origin = frame->origin; cvShowImage("Exemple Filtrage", colorlaplace ); if( cvWaitKey(10) >= 0 ) break; } cvReleaseCapture( &capture ); cvDestroyWindow("Exemple Filtrage");
L'exemple concerne l'extraction à partir d'une video en entrée, une image (courante) et lui applique un filtrage laplacien pour detecter les contours. Essayes le, apres pour on pourra faire un seuillage.
Apres pour lappliquer qu'à une seule image, il faudra juste enlever la boucle et faire quelques modifications.
Sinon, tu l'as déja testé et voir se que sa donne!?
[/QUOTE]
Code:
1
2
3
4
5
6 [C++ Error] Unit1.cpp(34): E2451 Undefined symbol 'CvCapture' [C++ Error] Unit1.cpp(34): E2451 Undefined symbol 'capture' [C++ Error] Unit1.cpp(38): E2268 Call to undefined function 'cvCaptureFromAVI' [C++ Error] Unit1.cpp(44): E2268 Call to undefined function 'fprintf' [C++ Error] Unit1.cpp(44): E2451 Undefined symbol 'stderr' [C++ Error] Unit1.cpp(82): E2268 Call to undefined function 'cvReleaseCapture'
Donc la librairie n'est pas bien installer. As tu ajouter les include que j'avais mentioné ? et les lib qui étaient dans le fichier compréssé en pièce jointes?
sinon pour les 'fprintf' et autres c'est claire qu'il faut ajouter les :
#include <sdtio.h>
#include <stdlib.h>
#include <iostream.h>
#include <string.h>
#Include <conio.h>
...; car les fenètre de la librairie demande un "keyboard hit" genre la fonction kbhit().
Bon courage