而在读取图像中RGB像素值时,matlab和python中的green值是不同的

2024-06-16 09:04:51 发布

您现在位置: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中的代码:

^{pr2}$

Tags: 代码in图像imageimportforsizenp
1条回答
网友
1楼 · 发布于 2024-06-16 09:04:51

与Matlab相比,Python中读取图像的“方向”不同。
如果将python代码更改为:

ij = j , i

而不是

^{pr2}$

您将得到与Matlab中相同的输出。在


如果您希望Matlab给出与Python相同的结果,则必须在那里翻转i和{}:

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个像素。

  • 通过打印ij和{}的内容,我得到:

    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和{}从ij = i, j改为{}将重现Matlab的结果。在

相关问题 更多 >