我的系统:Mac OS X 10.7
Python 2.7.1
NumPy 1.5.1版
我的代码:
image = openImage(fileDir)
print image
image = np.asarray(image)
print image
Run Code Online (Sandbox Code Playgroud)
如果我运行这个:
python main.py 1010.png
Run Code Online (Sandbox Code Playgroud)
输出是:
<PIL.PngImagePlugin.PngImageFile image mode=RGB size=10x10 at 0x10A835368>
[[[226 226 226] ... `
Run Code Online (Sandbox Code Playgroud)
如果我运行这个:
python main.py google.jpg
Run Code Online (Sandbox Code Playgroud)
输出是:
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=488x640 at 0x10140B368>
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=488x640 at 0x10140B368>
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚为什么numpy可以转换png但不能在jpg上做,为什么?我怎么解决这个问题?
编辑:
好的尝试过
image.show()
Run Code Online (Sandbox Code Playgroud)
并得到以下错误消息:
IOError: decoder jpeg not available
Run Code Online (Sandbox Code Playgroud)
我用这个页面提供的信息解决了这个问题:http:
//mariz.org/blog/2007/01/26/mac-os-x-decoder-jpeg-not-available/
我有2个阵列(G和G_).它们具有相同的形状和大小,我想对它们进行卷积.我找到了numpy.convolve和fftconvolve.我的代码就像:
foldedX = getFoldGradientsFFT(G, G_)
foldedY = getFoldGradientsNumpy(G, G_)
def getFoldGradientsFFT(G, G_):
# convolve via scipy fast fourier transform
X =signal.fftconvolve(G,G_, "same)
X*=255.0/numpy.max(X);
return X
def getFoldGradientsNumpy(G, G_):
# convolve via numpy.convolve
Y = ndimage.convolve(G, G_)
Y*=255.0/numpy.max(Y);
return Y
Run Code Online (Sandbox Code Playgroud)
但结果却不尽相同.结果如:Numpy.concolve()
[ 11.60287582 3.28262652 18.80395211 52.75829556 99.61675945
147.74124258 187.66178244 215.06160439 234.1907606 229.04221552]
Run Code Online (Sandbox Code Playgroud)
scipy.signal.fftconvolve:
[ -4.88130620e-15 6.74371119e-02 4.91875539e+00 1.94250997e+01
3.88227012e+01 6.70322921e+01 9.78460423e+01 1.08486302e+02
1.17267015e+02 1.15691562e+02]
Run Code Online (Sandbox Code Playgroud)
我认为结果应该是相同的,即使这两个函数用不同的程序进行卷积?!
我忘了提一下,我想要卷积2个二维数组:S数组:
G = array([[1,2],[3,4]])
G_ = array([[5,6],[7,8]])
Run Code Online (Sandbox Code Playgroud)
代码
def getFoldGradientsFFT(G, G_):
X =signal.fftconvolve(G,G_,"same")
X=X.astype("int")
X*=255.0/np.max(X);
return …Run Code Online (Sandbox Code Playgroud)