RuntimeWarning: überlauf aufgetreten, die in ubyte_scalars
Ich bin neu in Python und dies ist meine erste Sache, die ich habe gescriptet und ich Frage mich nur, was ich tun kann, um diese zu entfernen Warnung:
Warning (from warnings module):
File "C:\Users\Luri\Desktop\Bot Stuff\ImageSaver.py", line 76
currentdiff=abs(anread[w,h])-abs(bnread[w,h])
RuntimeWarning: overflow encountered in ubyte_scalars
Ich habe versucht zu Googlen, die Antwort, und nichts, war für mich klar kam, soweit dies zu beheben.
Ich versuche, ein Programm zu schreiben, dass vergleichen wird eine ständige Aktualisierung image, das von einem Rechteck um meinen cursor mit einem Referenzbild, dass ich bin auf der Suche nach.
Dann je nachdem, in welcher region sich der cursor in Bezug auf das Ziel-Bild ist, wird es entsprechend anpassen.
Danke für jede Hilfe, die Sie geben können!
-J
Code ist unten:
import os
import sys
import time
import Image
import ImageGrab
import win32api
import numpy, scipy
def mousePos():
#---------------------------------------------------------
#User Settings:
SaveDirectory=r'C:\Users\Luri\Desktop\Bot Stuff'
ImageEditorPath=r'C:\WINDOWS\system32\mspaint.exe'
#Here is another example:
#ImageEditorPath=r'C:\Program Files\IrfanView\i_view32.exe'
#---------------------------------------------------------
i,j = win32api.GetCursorPos()
print 'Your Cusor Position is:', i,j
time.sleep(1)
size = 112, 58
#-------------------
#data is defined as | x0y0 = [0,0] = (xpos-56,ypos-29) | x0y1 = [0,1] = (xpos-56,ypos+29) | x1y1 = [1,1] = (xpos+56,ypos+29) | x1y0 = [1,0] = (xpos+56,ypos-29)
#Take In Image In Rectangle around cursor position to locate text of name
pixeldiff=0
currentdiff=0
NQ1=193395
NQ2=166330
NQ3=171697
NQ4=168734
NAC=190253
NBC=205430
x0=i-56
y0=j-29
x1=i+56
y1=j+29
box=[x0, y0, x1, y1]
img=ImageGrab.grab()
saveas=os.path.join(SaveDirectory,'fullscreen.jpg')
img.save(saveas)
editorstring='""%s" "%s"'% (ImageEditorPath,saveas)
#Crop box around cursor
cursorbox=img.crop(box)
saveas=os.path.join(SaveDirectory,'cursorbox.jpg')
cursorbox.save(saveas)
#Converts the given cursor rectangle to 8bit grayscale from RGB
out = cursorbox.convert("L")
saveas=os.path.join(SaveDirectory,'lmodecurbox.jpg')
out.save(saveas)
#Takes the converted grayscale picture and converts it to an array
a=numpy.asarray(out)
aarray=Image.fromarray(a)
sizea = a.shape
# print sizea
# print a
anread=a[:]
#Loads the reference image
reference=Image.open("referencecold.png")
#Converts the given cursor rectangle to 8bit grayscale from RGB
refout = reference.convert("L")
saveas=os.path.join(SaveDirectory,'lmoderefbox.jpg')
refout.save(saveas)
#Takes the converted grayscale picture and converts it to an array
b=numpy.asarray(refout)
barray=Image.fromarray(b)
sizeb = b.shape
# print sizeb
# print b
# print size
bnread=b[:]
# print bnread
#Realized you can determine position based on this single quadrant
#Loop Quadrant 1 x0y1 to xmym
for h in range(0,29):
for w in range(0,55):
#currentdiff=0
currentdiff=abs(anread[w,h])-abs(bnread[w,h])
pixeldiff=pixeldiff+currentdiff
# print pixeldiff
#Test Above
if pixeldiff<198559 and pixeldiff>190253:
#Test Left
if pixeldiff > 175000:
#Move Above and Left
print ('Go Up and Left')
else:
#Move Above Right
print ('Go Up and Right')
if pixeldiff>198559 and pixeldiff<205430:
if pixeldiff < 185000:
#Move Below and Left
print ('Go Down and Left')
else:
#Move Below and Right
print ('Go Down and Right')
"""
#Nominal Q1=193395 Variance low = 188408 Variance high = 203194
#Nominal Q2=166330 Variance low = 181116 Variance high = 199208
#Nominal Q3=171697 Variance low = 172279 Variance high = 201816
#Nominal Q4=168734 Variance low = 190644 Variance high = 191878
#Nominal Center = 198559
#Nominal Above Center = 190253
#Nominal Below Center = 205430
#Loop Quadrant 2 xmy1 to x1ym
for h in range(0,29):
for w in range(55,111):
difference=abs(a(w,h)-b(w,h))
currentdiff=abs(anread[w,h])-abs(bnread[w,h])
pixeldiff=pixeldiff+currentdiff
#Loop Quadrant 3 x0ym to xmy0
for h in range(29,57):
for w in range(0,55):
difference=abs(a(w,h)-b(w,h))
currentdiff=abs(anread[w,h])-abs(bnread[w,h])
pixeldiff=pixeldiff+currentdiff
#Loop Quadrant 4 xmym to x1y0
for h in range(29,57):
for w in range(55,111):
difference=abs(a(w,h)-b(w,h))
currentdiff=abs(anread[w,h])-abs(bnread[w,h])
pixeldiff=pixeldiff+currentdiff
#Fine Nominal Values for Each quadrant pixeldiff
#Compare which is similar and then move cursor in center of that quadrant
"""
def main():
# while True:
mousePos()
if __name__ == "__main__":
main()
#Compare image to constantly updating image of rectangle around cursor (maybe per second?) by searching for the quadrant with most similarity
#-------------------
#Based on comparison, move cursor to middle (x and y value) of matched quadrant by population of similar features and repeat
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Sie hinzufügen, zwei
uint8
Werte zusammen ergeben einuint8
Wert. Sie müssen für die Transformation von Datentypen bei der Berechnung. Ich schlage vor, Sie versuchen, diese:Sollte diese Arbeit.
Edit: ausgewogene bracketts
int()
es. Es ist schon zu spät in derpixeldiff
Linie.Ich hatte ein ähnliches problem, das ich gelöst, indem beim initialisieren meiner numpy-arrays als
int64
Datentyp:Ich denke, dass Ihr problem ergibt sich aus dieser Linie:
Denken Sie daran, dass die Pixel sind in der Regel gespeichert in
uint8
Datentyp, also 0 bis 255. Also, wenn Sie versuchen, fügen Sie zwei von Ihnen, und es geht über 255, wird es scheitern.Etwas wie das hier tun:
Erhalten Sie noch die relationalen Daten, aber es wird komprimiert in die richtige Größe von 0-255.
int()
es. Es ist schon zu spät in derpixeldiff
Linie.