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