私はPython=に不慣れです。これは私がスクリプトを作成した最初のことであり、この警告を削除するために何ができるのか疑問に思っています:
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
私は答えをグーグルで試してみましたが、これを修正するまで私には明らかなものは何もありませんでした。
私は、カーソルの周りの長方形から取得された継続的に更新される画像と、検索している参照画像を比較するプログラムを作成しようとしています。
次に、カーソルがターゲット画像に対してどの領域にあるかに応じて、それに応じて調整されます。
あなたが与えることができるあらゆる助けをありがとう!
-J
コードは以下の通りです:
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
2つのuint8
値を加算すると、uint8
値になります。計算でデータ型を変換する必要があります。これを試してみることをお勧めします:
pixeldiff = (int(ipxeldiff)+int(currentdiff))/2
これは動作するはずです。
編集:バランスブラケット
同様の問題があり、numpy配列をint64
データ型として初期化することで解決しました。
imAnchor = array(Image.open(imList[10]), dtype='int64')
私はあなたの問題はこの行に起因すると思います:
pixeldiff=pixeldiff+currentdiff
ピクセルは通常uint8
データ型。0〜255です。2つ追加しようとして、255を超えると失敗します。
このようなことをしてください:
pixeldiff = (pixeldiff+currentdiff)/2
リレーショナルデータは引き続き取得できますが、0〜255の適切なサイズに圧縮されます。