我正在尝试创建一个简单的python脚本,当给定一张照片时,首先将其转换为灰度,然后将其绑定为多种颜色。例如,如果传入的颜色数为2,则灰度图像将发生变化,使每个像素都是黑色(0)或亮白色(255)。你知道吗
但是,当调用用于确定每个像素的灰度值的函数“getGreyscaleValue”时,出现了一个错误。似乎在将数组'bandWidthArray'和'colorsArray'传递到函数中时,它们会从数组变为标量变量'0.0'。运行以下脚本并观察打印的值,应该会复制问题:
import numpy as np
from PIL import Image
numberOfColors = 2;
greyscaleRange=255;
col = Image.open("IMG_5525.JPG")
gray = col.convert('L') # Make grayscale
y=np.asarray(gray.getdata(),dtype=np.float64).reshape((gray.size[1],gray.size[0]))
def getGreyScaleValue(x, bandWidthArray, colorsArray):
print(bandWidthArray)
print(colorsArray)
for i in range(1, bandWidthArray.len):
if(int(round(x))<int(round(bandWidthArray[i]))):
return colorsArray[i-1]
return 255
bandWidthArray = np.linspace(0, greyscaleRange, numberOfColors+1)
colorsArray = np.linspace(0, greyscaleRange, numberOfColors)
getGreyScaleValue = np.vectorize(getGreyScaleValue)
print(bandWidthArray)
print(colorsArray)
y = getGreyScaleValue(y, bandWidthArray, colorsArray)
y=np.asarray(y,dtype=np.uint8) #if values still in range 0-255!
w=Image.fromarray(y,mode='L')
w.save('out.jpg')
堆栈跟踪如下:
PS C:\python\pythonimages> python imgChange1.py
[ 0. 127.5 255. ]
[ 0. 255.]
0.0
0.0
Traceback (most recent call last):
File "imgChange1.py", line 27, in <module>
y = getGreyScaleValue(y, bandWidthArray, colorsArray)
File "C:\Users\Jack\AppData\Local\Programs\Python\Python36\lib\site-packages\numpy\lib\function_base.py", line 2734, in __call__
return self._vectorize_call(func=func, args=vargs)
File "C:\Users\Jack\AppData\Local\Programs\Python\Python36\lib\site-packages\numpy\lib\function_base.py", line 2804, in _vectorize_call
ufunc, otypes = self._get_ufunc_and_otypes(func=func, args=args)
File "C:\Users\Jack\AppData\Local\Programs\Python\Python36\lib\site-packages\numpy\lib\function_base.py", line 2764, in _get_ufunc_and_otypes
outputs = func(*inputs)
File "imgChange1.py", line 15, in getGreyScaleValue
for i in range(1, bandWidthArray.len):
AttributeError: 'numpy.float64' object has no attribute 'len'
可以更改为
更改:
收件人:
NumPy数组没有
len
方法。你知道吗此外,不要矢量化你的函数。删除此行:
相关问题 更多 >
编程相关推荐