我想从图像中获取RGB的像素值.我在Matlab和Python中做到了,但是我获得了不同的值,尤其是在绿色值上.
如果您对此事有任何建议,我们将不胜感激.
谢谢
这是我在python中的代码
from PIL import Image
import numpy as np
im = Image.open("lena.jpg")
imPixelVal = np.ones(np.size(im))
imSize = np.size(im)
for i in range (0,imSize[0]):
for j in range (0,imSize[1]):
ij = i , j
p = im.getpixel(ij)
imPixelVal[i,j] = (0.2989 * p[0]) + (0.5870 * p[1]) + (0.1140 * p[2])
print p[0]
print p[1]
print p[2]
这也是Matlab中的代码:
Im=imread('lena.jpg');
Img = (ones(size(Im,1),size(Im,2)));
for i=1:size(Im,1)
for j=1:size(Im,2)
Img(i,j)=0.2989*Im(i,j,1)+0.5870*Im(i,j,2)+0.1140*Im(i,j,3);
end
end
Im(1,1,1)
Im(1,1,2)
Im(1,1,3)
解决方法:
与Matlab相比,似乎在Python中以不同的“方向”读取图像.
如果将python代码更改为:
ij = j , i
代替
ij = i , j
您将获得与Matlab中相同的输出.
如果希望Matlab提供与Python相同的结果,则必须在此处翻转i和j:
Img(j,i)=0.2989*Im(j,i,1)+0.5870*Im(j,i,2)+0.1140*Im(j,i,3);
这是我通过简单的调试来解决的方法:
>首先,我从here获得图像并将其另存为.jpg.
>然后,我将Matlab循环更改为
for i=1:2
for j=1:2
这样我只会得到前4个像素.
>通过同时打印i,j和Im的内容,我得到了:
i = 1, j = 1
225, 137, 125
i = 1, j = 2
227, 139, 127
i = 2, j = 1
224, 136, 124
i = 2, j = 2
226, 138, 126
>现在,我在python中做了同样的事情:
for i in range (0,2):
for j in range (0,2):
>这给了我:
(0, 0)
225 137 125
(0, 1)
224 136 124
(1, 0)
227 139 127
(1, 1)
226 138 126
>这向我展示了Matlab和Python之间的顺序不同.
>因此,将Python中的i和j从ij = i,j更改为ij = j,我将重现Matlab结果.