Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

RuntimeWarning: overflow encountered in ubyte_scalars

Tags:

I'm new to Python and this is my first ever thing I've scripted and I'm just wondering what I can do to remove this warning:

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 

I've tried Googling the answer and nothing that was clear to me came up as far as fixing this.

I'm trying to write a program that will compare a continuously updating image that is taken from a rectangle around my cursor with a reference image that I'm searching for.

Then depending on what region the cursor is in relative to the target image, it will adjust accordingly.

Thank you for any help you can give!

-J

Code is below:

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 
like image 762
JessietheStudent Avatar asked Feb 21 '12 20:02

JessietheStudent


2 Answers

You are adding two uint8 values together resulting in an uint8 value. You need to transform your data types in the calculation. I suggest you try this:

pixeldiff = (int(ipxeldiff)+int(currentdiff))/2 

This should work.

Edit: balanced bracketts

like image 181
Zim Avatar answered Sep 21 '22 18:09

Zim


I had a similar problem that I resolved by initializing my numpy arrays as an int64 datatype:

imAnchor = array(Image.open(imList[10]), dtype='int64') 
like image 22
DanGoodrick Avatar answered Sep 24 '22 18:09

DanGoodrick