【问题标题】:While the reading of image for RGB pixel values there is different value of green in matlab and python虽然读取 RGB 像素值的图像,但 matlab 和 python 中的绿色值不同
【发布时间】:2014-10-16 01:35:10
【问题描述】:

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

【问题讨论】:

  • 能否提供MCVE 和数据差异示例?
  • 了解您的图像采用哪种数据格式可能会很有趣。
  • 详细说明您使用的代码以及不同之处。
  • 我编辑并添加了 Python 和 Matlab 的代码
  • 由于 JPEG 是一种有损格式,不同的阅读器可以很容易地相差 +/-1,具体取决于它们如何对解码值进行四舍五入。不过,Schorsch 的答案可能是正确的。

标签: python matlab image-processing rgb getpixel


【解决方案1】:

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

ij = j , i

而不是

ij = i , j

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


如果您希望 Matlab 给出与 Python 相同的结果,则必须在此处翻转 ij

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

  • 通过打印ijIm 的内容,我得到:

    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 中的 ijij = i, j 更改为 ij = j, i 将重现 Matlab 结果。

【讨论】:

  • @lisa - 请考虑接受这个答案,如果它不适合你,请发表评论
猜你喜欢
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
相关资源
最近更新 更多