在读取RGB像素值的图像时,在matlab和python中有不同的绿色值

我想从图像中获取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结果.

上一篇:C#-没有GetPixel的索引8bpp图像和像素数组


下一篇:django_auth_ldap