Einzelnen Beitrag anzeigen

F1r3man

Registriert seit: 8. Nov 2016
8 Beiträge
 
#7

AW: External: SIGEGV bei Rect()

  Alt 6. Dez 2016, 22:43
Klappt. ist jetzt nur noch ein Pfad Fehler. den kriege ich geklärt. und hier die Funktion. Ich schreibe grad als ein Schulprojekt eine Kennzeichenerkennung für eine Tankstelle wenn du lust hast dich da reinzulesen, hier die Funktion, die du wolltest. Ich habe das format auf TBitmap gesetzt, weil das das Format von img ist.... n bissle dumme bezeichnung ich weiß xD bin nur zu faul das zu ändern, aber wie gesagt funktioniert jetzt alles.
Ty.
Lg Simon


Delphi-Quellcode:
function TKennzeichenFinden.findeKanten(img: TBitmap; filterRad: integer; tolleranzschwelle: integer; saveOn: TBitmap): TBitmap;
var
  farbe: TColor;
  mittelwert: array of integer;
  x, y, i, j, g, buffx, buffy: integer;
  durchschnitt: integer;
  felder: array of array of integer;
begin
  durchschnitt:= (filterRad*2)-1;
  setLength(mittelwert, 4);
  setLength(felder, durchschnitt);
  for i:= 0 to Length(felder)-1 do
  begin
    setLength(felder[i], durchschnitt);
  end;
  //echte Korrdinaten
  for x:=filterRad to img.Width-filterRad-1 do
  begin
    for y:=filterRad to img.Height-filterRad-1 do
    begin
      //durchgehen des Filterbereiches
      for i:= 0 to durchschnitt-1 do
      begin
        for j:= 0 to durchschnitt-1 do
        begin
          //aktuelle Filterposition (start oben links)
          buffx:= x-filterRad+i;
          buffy:= y-filterRad+j;
          farbe:= img.Canvas.Pixels[buffx, buffy];
          felder[buffx][buffy]:=round((Red(farbe)+Green(farbe)+Blue(farbe))/3);
        end;
      end;
      //berechnen des Durschschnitts Pro Sektor
      for i:= 0 to Length(felder)-1 do
      begin
        for j:= 0 to Length(felder[i])-1 do
        begin
          if(i<=filterRad) then
          begin
            //sektor 1
            if(j<=filterRad) then
            begin
              mittelwert[0]:= mittelwert[0]+felder[i][j];
            end;
            //sektor 2
            if(j>=filterRad) then
            begin
              mittelwert[1]:= mittelwert[1]+felder[i][j];
            end;
          end;
          if(i>=filterRad) then
          begin
            //sektor 3
            if(j<=filterRad) then
            begin
              mittelwert[2]:= mittelwert[2]+felder[i][j];
            end;
            //sektor 4
            if(j>=filterRad) then
            begin
              mittelwert[3]:= mittelwert[3]+felder[i][j];
            end;
          end;
        end;
      end;
      //durschschnitte final berechnen
      for g:= 0 to Length(mittelwert)-1 do
      begin
        mittelwert[g]:= Round(mittelwert[g]/(filterRad*filterRad));
      end;
      //Bitmaps setzen
      if (mittelwert[0]<tolleranzschwelle) AND (mittelwert[1]<tolleranzschwelle) AND (mittelwert[2]>=tolleranzschwelle) AND (mittelwert[3]>=tolleranzschwelle) then
      begin
        saveOn.Canvas.Pixels[x, y]:=TopBorder;
      end;
      if (mittelwert[0]<tolleranzschwelle) AND (mittelwert[1]>=tolleranzschwelle) AND (mittelwert[2]<tolleranzschwelle) AND (mittelwert[3]>=tolleranzschwelle) then
      begin
        saveOn.Canvas.Pixels[x, y]:=LeftBorder;
      end;
      if (mittelwert[0]>=tolleranzschwelle) AND (mittelwert[1]>=tolleranzschwelle) AND (mittelwert[2]<tolleranzschwelle) AND (mittelwert[3]<tolleranzschwelle) then
      begin
        saveOn.Canvas.Pixels[x, y]:=BottomBorder;
      end;
      if (mittelwert[0]>=tolleranzschwelle) AND (mittelwert[1]<tolleranzschwelle) AND (mittelwert[2]>=tolleranzschwelle) AND (mittelwert[3]<tolleranzschwelle) then
      begin
        saveOn.Canvas.Pixels[x, y]:=Rightborder;
      end
      else
      begin
        saveOn.Canvas.Pixels[x, y]:=RGBToColor(0, 0, 0);
      end;
    end;
  end;
  result:= saveOn;
end;
kann vielleicht noch verbessert werden, aber ist OK, das ist ja der Spaß an dem Projekt. xD
  Mit Zitat antworten Zitat