bilderkennung ohne farbe

  • Sind die buttons animiert? wenn ja musste irgendwas anderes nehmen was nich die farbe ändert.
    z.B. das fragezeichen oder der rahmen.(ich spreche von pixelgetcolor ^^ )

    hoffe ich konnte helfen

  • Hallo,

    das Problem hatte ich auch mal, wenn Mischwerte in einem Bereich verwendet werden und dann noch die Position um ein paar Pixel abweichen kann, hat man eine ziemlich große Toleranz.

    Ich habe damals eine Funktion zur Mittelwertbildung geschrieben, die von einer bestimmten Position aus die RGB Farben getrennt über mehrere Pixel mittelt.

    [autoit]


    Func _MeanColorValue ($X, $Y, $Size) ;Berechnet den Durchschnittsfarbwert des Bereichs

    [/autoit][autoit][/autoit][autoit]

    Local $R, $G, $B

    [/autoit][autoit][/autoit][autoit]

    Local $i, $k, $cnt

    [/autoit][autoit][/autoit][autoit]

    Local $ColorHex

    [/autoit][autoit][/autoit][autoit]

    Local $StrHex

    [/autoit][autoit][/autoit][autoit]


    For $i = 0 To $Size

    For $k=0 To $Size

    $ColorHex = Hex(PixelGetColor ($X+$i, $Y+$k),6)

    ;ConsoleWrite ("Data: " &$i &"-"&$k & " : "&$ColorHex &@CR)

    $R+= Dec(StringMid($ColorHex,1,2))

    $G+= Dec(StringMid($ColorHex,3,2))

    $B+= Dec(StringMid($ColorHex,5,2))

    $cnt+=1

    Next

    Next

    [/autoit][autoit][/autoit][autoit]


    $StrHex = Hex(Round($R/$cnt),2) & Hex(Round($G/$cnt),2) & Hex(Round($B/$cnt),2)

    [/autoit][autoit][/autoit][autoit]


    Return Dec ($StrHex)

    [/autoit][autoit][/autoit][autoit]

    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func _MatchColorValue($Color, $Color2, $Tol) ;Matched 2 Farben abhängig vom Toleranzwert

    [/autoit][autoit][/autoit][autoit]

    Local $R, $G, $B

    [/autoit][autoit][/autoit][autoit]

    Local $Match = True


    If IsNumber($Color) Then

    $Color=Hex($Color,6)

    EndIf

    If IsNumber($Color2) Then

    $Color2=Hex($Color2,6)

    EndIf

    If IsString($Tol) Then

    $Tol=Dec($Tol)

    EndIf


    ;Match Colors per Channel

    $R = Dec(StringMid($Color,1,2)) - Dec(StringMid($Color2,1,2))

    $G = Dec(StringMid($Color,3,2)) - Dec(StringMid($Color2,3,2))

    $B = Dec(StringMid($Color,5,2)) - Dec(StringMid($Color2,5,2))

    If Abs($R) > $Tol OR Abs($G) > $Tol OR Abs($B) > $Tol Then

    $Match = False

    EndIf


    Return $Match

    [/autoit][autoit][/autoit][autoit]

    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit]


    Versuchs mal damit. Ist nicht perfekt, aber bei mir hat es damals mit einer Toleranz von 10 zuverlässig funktioniert. Die möglichen Farben lagen zum Glück weit genug auseinander :) Ich habe über 4x4 Pixel gemittelt und mir die Ergebnisse für 5-10 Durchläufe aufgeschrieben. Danach konnte ich den Toleranzwert gut bestimmen.

    Gruß