值错误:数学范围错误(python)
我在测试数学模块和PIL模块,想在一张图片上应用一个盒子计数算法。当我运行下面的代码时,出现了一个错误:
Traceback (most recent call last):
File "C:\Users\Joao\Desktop\Image Size.py", line 48, in <module>
gy.append(math.log(boxCount))
ValueError: math domain error
代码:
import Tkinter as tk
from Tkinter import *
from PIL import Image, ImageTk
import os, glob, tkFileDialog
import math
im = Image.open("img1.bmp")
width, height = im.size
print width
print height
imgx = width
imgy = height
pixels = im.load()
theColor = (255, 255, 255)
# fractal dimension calculation using box-counting method
b = 2 # initial box size in pixels
f = 2 # box scaling factor
n = 3 # number of graph points for simple linear regression
gx = [] # x coordinates of graph points
gy = [] # y coordinates of graph points
for ib in range(n):
bs = b * f ** ib # box size in pixels
bnx = int(imgx / bs) # of boxes in x direction of image
bny = int(imgy / bs) # of boxes in y direction of image
boxCount = 0
for by in range(bny):
for bx in range(bnx):
# if there are any pixels in the box then increase box count
foundPixel = False
for ky in range(bs):
for kx in range(bs):
if pixels[bs * bx + kx, bs * by + ky] == theColor:
foundPixel = True
boxCount += 1
break
if foundPixel:
break
gx.append(math.log(1.0 / bs))
gy.append(math.log(boxCount))
我发现如果把盒子计数的值改成1(而不是0),就不会出现错误,但我需要盒子计数的值是0。有没有人能给我个解决办法?
1 个回答
5
因为负数或零的对数是没有定义的。所以要把:
gy.append(math.log(boxCount))
换成这个:
gy.append(math.log(boxCount if boxCount>0 else 1))