Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : trés urgent(probléme de programmation) [ Divers / Débutant(e) ] (amine52002)

mercredi 13 février 2008 à 20:06:34 | trés urgent(probléme de programmation)

amine52002


bonsoir ,
je suis debutant en programmation et j'ai voulé creer un programme qui permet d'extraire un ensemble de points à partir de la silhouette d'une image et d'afficher ces points sur une autre variable image
l'idée c'est pr chaque distance D je prend un point
j'ai esseyé de faire ce code mais il na pas marché
pouriez vous m'aidez la SVP

procedure TForm1.preleverClick(sender:Tobject);
var
x,y: Tpoint;
i,j,nbCount,z,t:integer;
begin
 nbCount:=0;
for j:=0 to bmp.height-1 do
  for j:=0 to bmp.width-1 do
   begin
    x.X:=bmp.Canvas.PenPos.X;
    x.Y:= bmp.Canvas.PenPos.Y;
    tableau[nbCount]:=x;
    nbCount:= nbCount+1;
   end;
  for i:=0 to nbCount-1 do
   begin
    y.X:=tableau[nbCount].X;  z:=y.X;
    y.Y:=tableau[nbCount].Y;  t:=y.Y;
   form1.Image2.Canvas.MoveTo(z,t);
   end;
end;

pouriez vous optimisez mon code pr qu'il puisse marcher


mercredi 13 février 2008 à 21:26:33 | Re : trés urgent(probléme de programmation)

Guillemouze

ouhaaaaa, ca c'est une procedure qui sert a ..... bah absolument a rien !!!
j'ai pas trop compris ton sujet, mais ca me semble pas des plus simple pour debuter

procedure TForm1.preleverClick(sender:Tobject);
var
x,y: Tpoint;
i,j,nbCount,z,t:integer;
begin
  nbCount:=0;
  for j:=0 to bmp.height-1 do
    for j:=0 to bmp.width-1 do //modification de la variable "j" de la premiere boucle, je croyai que c'etait pas possible. peut etre utiliser i et j
    begin //la tu parcours chaque pixel ton image
      x.X:=bmp.Canvas.PenPos.X;
      x.Y:= bmp.Canvas.PenPos.Y;
      //Le penpos dans ta boucle ne change pas, donc
tableau[x]=tableau[x+1]
      tableau[nbCount]:=x;
      nbCount:= nbCount+1;
    end;

    //a ce stade, tu as un tableau de
bmp.height*bmp.width elements tous identiques correspondant au penpos de ton bmp

  for i:=0 to nbCount-1 do
  begin
    y.X:=tableau[nbCount].X; 
    z:=y.X;
    y.Y:=tableau[nbCount].Y; 
    t:=y.Y;
    form1.Image2.Canvas.MoveTo(z,t);
  end;
  //la boucle precedente est equivalente a la suivante: ...
  for i:=0 to nbCount-1 do
  begin
    form1.Image2.Canvas.MoveTo(
tableau[nbCount].X, tableau[nbCount].Y);
  end;
  //... qui deplace le Pen (sans dessiner, ca c'est LineTo) su chaque pixel de ton image
end;

Pour resumer, tu memorise autant de fois qu'il y a de pixels dans ton image la position du pen qui ne bouge pas, et ensuite, tu deplace le pen d'une autre image sur ce meme point le meme nombre de fois. Pas tres efficace to ca.

Sinon, tu peux faire

form1.Image2.bitmap.assign(bmp);

mercredi 13 février 2008 à 21:47:04 | Re : trés urgent(probléme de programmation)

amine52002

enfait l'idée de penpos ne me sert à rien j'ai juste essayé avec
mon probléme c'est que au depart j'ai le contour externe d'une image avec qui je doit recuperer un ensemble de points par exemple pr chaque 3 pixel je prend un point jusqua la fin du contour (sela ce fait de maniére algorithmique) et que par la suite afficher ces points sur un autre Timage
mon grand pb c'est que je ne sais pas vraiment programmé
et que j'ai resté des jours à ecrire ce code
SVP aidez moi

mercredi 13 février 2008 à 22:19:43 | Re : trés urgent(probléme de programmation)

Oniria

Bonjour,

si j'ai bien compris, tu as une image avec le contour et tu veux mémoriser tous les points du contour pour pouvoir les réafficher dans une autre image ?
Déja, ton algorythme c'est quoi ? Tu ne peux pas partir à l'aveuglette. Comment compte tu mémoriser les points du contour , veux tu que tes points se suivent comme une ligne que l'on suit ou veux tu juste mémoriser les points du contour comme un simple nuage de point (si les points se suivent, tu pourras faire des zooms facilement mais l'analyse est assez complexe sinon le nuage est très facile à faire mais un zoom est bien plus dur) ? Ton contour a - t-il toujours la même couleur (comment le différencier du reste de l'image ? ). Pour pouvoir faire ton programme, il faut que tu détailles un peux plus ton projet car ton code n'est pas clair et je suis désolé mais je ne peux pas t'aider sans plus de détails.

Une bonne étude du probléme et ton programme va se faire tout seul , mais j'en conviens, ce n'est pas facile ...

Oniria

mercredi 13 février 2008 à 22:35:09 | Re : trés urgent(probléme de programmation)

amine52002

enfait mon application consiste à faire une description textuelle de mon objet grace au contour externe je pourais faire une description textuelle qui se base sur :
decouper le contour en morceau (on va avoir un ensemble de courbes concave convexe ou droite ) l'idée c'est de determiner les equations(primitive simple de degré 2) de ces courbes pour cela  je doit faire une approximation  par moindre carré  (sur cette  partie  j'ai  trouvé  un exemple)  mais tt d'abord  je doit demarrer  par un ensemble de points  que je doit l'extraire  à partir  des courbes que j'ai  ça veu dire je vais avoir  la meme  trace  dans les points  que celle  de ma courbe
mon grand probléme c'est je suis un debutant en programmation

mercredi 13 février 2008 à 22:49:18 | Re : trés urgent(probléme de programmation)

Caribensila

Membre Club

Si j'ai bien compris, mais 'faut s'accrocher :)

2 TImages et un TButton sur une fiche.

var
  Tableau    : array[0..1000] of Tpoint;//Contient les points cliqués.
  NbrePixels : Integer; 
//Nbre Pixels cliqués.

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
{Peut-être mieux avec MouseMove ?}
  var
  i : integer;
  begin
  if NbrePixels=0 then for i := 0 to high(Tableau) do Tableau[i] := Point(X,Y); // On initialise Tableau qd 1er pt cliqué.
  Tableau[NbrePixels] := point(X,Y);//On mémorise les TPoints cliqués dans le tableau, à chaque click.
  inc(NbrePixels);
end;

procedure TForm1.Button1Click(Sender: TObject);
  {Dessine les pts du tableau ds l'image2}
  var
  Bmp : Tbitmap;
  i   : Integer;
  begin
  Bmp :=Tbitmap.Create;
  Bmp.Height := Image1.Picture.Height;
  Bmp.Width  := Image1.Picture.Width;
  Bmp.Canvas.Brush.Color := clWhite; // Peinture blanche à la brosse.
  Bmp.Canvas.FillRect(Bmp.Canvas.ClipRect); //On peint le Bmp.
  //Bmp.Canvas.Polygon(tableau);//Joint chaque pt de Tableau par une ligne noire sur Bmp.
  for i := 0 to NbrePixels do //ou que les pts.
    Bmp.Canvas.Pixels[tableau[i].X,tableau[i].Y] := clBlack;
  Image2.Picture.Bitmap.Assign(Bmp);
end;


mercredi 13 février 2008 à 23:09:58 | Re : trés urgent(probléme de programmation)

Caribensila

Membre Club

Autre version qui te dessine directement une courbe. Mais je ne sais pas si c'est ce que tu cherches, en fait :

var
  Tableau : array[0..5000] of Tpoint; //Contient les points cliqués.
  NbrePixels : Integer; 
//Nbre Pixels ds le tableau.

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  var
  i : integer;
  begin
  NbrePixels := 0;
  for i := 0 to high(Tableau) do Tableau[i] := Point(X,Y);
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  begin
  if ssLeft in Shift then begin //vérifie que le bouton gauche est enfoncé.
  {Trace une ligne de sélection en noir.}
  Image1.Picture.Bitmap.Canvas.Pixels[X,Y] := clblack;
  Tableau[NbrePixels] := point(X,Y);
  inc(NbrePixels);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
  {Dessine les pts du tableau ds l'image2}
  var
  Bmp : Tbitmap;
  i   : Integer;
  begin
  Bmp :=Tbitmap.Create;
  Bmp.Height := Image1.Picture.Height;
  Bmp.Width  := Image1.Picture.Width;
  Bmp.Canvas.Brush.Color := clWhite; // Peinture blanche à la brosse.
  Bmp.Canvas.FillRect(Bmp.Canvas.ClipRect); //On peint le Bmp.
  Bmp.Canvas.Polygon(tableau);//Joint chaque pt de Tableau par une ligne noire sur Bmp.
  Image2.Picture.Bitmap.Assign(Bmp);
end;


mercredi 13 février 2008 à 23:28:09 | Re : trés urgent(probléme de programmation)

Caribensila

Membre Club
Précision pour Amine:

Dans ces 2 exemples, c'est toi qui dessine le contour à la souris.
Si tu veux le faire par logiciel, ce n'est plus un truc de débutant...

mercredi 13 février 2008 à 23:41:42 | Re : trés urgent(probléme de programmation)

Caribensila

Membre Club
... Et si tu pouvais nous montrer l'image sur laquelle tu travailles, ça nous éviterait peut-être de partir dans des trucs compliqués  ;)

jeudi 14 février 2008 à 09:10:28 | Re : trés urgent(probléme de programmation)

Loda

Membre Club
salut,

moi quand j'entends parler de "détecter des contours" je penses tout de suite à une différentielle par calcul matricielle. C'est quand même un des meilleurs moyens...

mais, j'ai comme l'impression que c'est un labo... donc tu devrait t'en tenir à ce que ton prof vous a suggéré...

bon code,

Loda

Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.


1 2 3

Cette discussion est classé dans : programmation, for, bmp, begin, nbcount


Répondre à ce message

Sujets en rapport avec ce message

garder plusieurs images en memoire [ par valkyrie ] Bonjourj aimerais garder en memoire plusieurs images en meme temps du genrej ai une fenetre avec 6 boutons d opendialogje rentre le nom de l image dan TChart [ par yannba ] J'utilise un graphique avec une base de données :procedure CalculGraphique;var i,j:integer;    donnees : array [0..1000] of real;begin    With Form5.C résolution sudoku backtrack [ par zwyx ] Bonjour à tous, Pour ceux qui aiment bien se creuser la tête sur de l'algorithmie... J'ai écrit un code permettant de résoude une grille de sudoku ré bmpTOjpeg ? [ par Taktaky ] Salutje peut exporte Image comme .bmp mais je voudrais ausssi comme .jpeg soufgarderfunction BmpToJpeg(bmp:TBitmap):TJpegImage; begin   BmpToJpeg exo sur les tableau pour les debutents [ par aom2009 ] ce programme c'est pour s'exercer sur les tableaux ecrit par aom2009 program tab_de_2dimension; uses crt; {itroduction SavetoFile ne fonctionne pas avec D2005 , [ par MarcelF ] Bonjour,J'ai un pb avec D2005, je voudrais sauver le contenu du clipboard dans un fichier. Ceci fonctionnait sans pb avec Office 2003.Avec Office 2007 LeeWee, Pseudo langage de programmation Développer avec Lazarus [ par craftsystem ] Salut amis Lazarussien... voilà cela fait un bout de temps que je travaille sur un pseudo langage de programmation or Fermer Forms Dynamiques [ par nirG ] Bonjour,Je recherche une façon de fermer mes forms dynamiques. Je vous présente un bout de mon code afin que vous compreniez.for I := 0 to Compteurcha EmbeddedWB Refresh Problem mais chez WebBrowser pas de Probleme ?!!! [ par sarssor ] Salutcet Code sa marche bien avec WebBrowser mais je voudrais l'ituliser aussi dans EmbeddedWB :HTML clipboardprocedure TForm1.Button1Click(Sender: TO Rave report [ par frisco42 ] Bonjour,Je m'initie à rave report avec Delphi 2007 et Interbase. J'ai créé un base de donnée toute simple, un état sous rave mais je n'arrive pas à fa


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,437 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.