我想从图像中获取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)
答案 0 :(得分:3)
看来图像是以不同的方向读取的。在Python中与Matlab相比 如果您将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);
以下是我通过简单调试解决这个问题的方法:
.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的顺序不同。
i
和j
从ij = i, j
更改为ij = j, i
将重现Matlab结果。