Sapnesh Naik Sapnesh Naik - 5 months ago 22
Python Question

python-2.7 | SimpleCV - TypeError: 'float' object cannot be interpreted as an index

I'm trying to build a Image dewarping tool using simpleCV
and python2.7
.

The code below worked perfectly fine before(when I was on Ubuntu 16.04.1 LTS)
but I recently updated to the Ubuntu 17.04 and I get this error now.

Here is the function:

def buildMap(Ws, Hs, Wd, Hd, R1, R2, Cx, Cy):
map_x = np.zeros((Hd, Wd),np.float32)
map_y = np.zeros((Hd, Wd),np.float32)
rMap = np.linspace(R1, R1 + (R2 - R1), Hd)
thetaMap = np.linspace(0, 0 + float(Wd) * 2.0 * np.pi, Wd)
sinMap = np.sin(thetaMap)
cosMap = np.cos(thetaMap)

for y in xrange(0, int(Hd-1)):
map_x[y] = Cx + rMap[y] * sinMap
map_y[y] = Cy + rMap[y] * cosMap

return map_x, map_y


and this is the error I get:

Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 754, in run
self.__target(*self.__args, **self.__kwargs)
File "./fy360.py", line 189, in new_dewarp
xmap, ymap = buildMap(Ws, Hs, Wd, Hd, R1, R2, Cx, Cy)
File "./fy360.py", line 122, in buildMap
map_x = np.zeros((Hd, Wd),np.float32)
TypeError: 'float' object cannot be interpreted as an index


what is the problem in my code?

Answer Source

the np.zeros function needs Hd and Wd to be integers, not floats. Previous versions of Python would silently cast to integer, but newer versions give an error instead. Try adding this:

Hd = int(Hd)
Wd = int(Wd)