2017-04-25 95 views
0

我想改变每一个像素,所以它是“255 - 像素”。 我想做for循环(!)。访问单个图像像素,matlab

我的代码至今:

for n=1:1:512 %it's a 512x512 image 
    picture = 255 - picture; 
end 

,但我不知道如何通过单个像素更改图像中单个像素。

那么我需要更改“图片”在我的代码?

对不起英语不好。我也是一个总新手。

感谢您的帮助

回答

4

如果你坚持要用一个for循环,来计算补充一个号码一般数组的每个元素:

for n=1:numel(picture) 
    picture(n) = 255 - picture(n); 
end 

或者,如果需要为一个二维阵列嵌套循环:

for n=1:size(picture,1) 
    for m=1:size(picture,2) 
    picture(n,m) = 255 - picture(n,m); 
    end 
end 

但是,这真的是滥用Matlab。为什么要使用Matlab的很大一部分是,确切地说是以避免这样的for-loops。相反,你应该简单地:

picture = 255 - picture 
+0

什么是“numel”?这是一次大学练习,并专门用循环说,但在第二个练习中,它说要像你所建议的那样做(矩阵运算) – noclue123

+0

我想象这可能是练习的一部分。 ['numel'](https://www.mathworks.com/help/matlab/ref/numel.html)计算数组中元素的数量。第一个示例与[线性索引](https://www.mathworks.com/help/matlab/math/matrix-indexing.html#f1-85511)一起使用以访问阵列的所有元素,而不管其形状。参考Matlab的文档很有用,特别是关于[基础](https://www.mathworks.com/help/matlab/language-fundamentals.html)的章节。 – Yuval

2

,如果你想改变整个画面,我不会使用任何for循环推荐。 只是:

picture = 255 - picture; 

如果Matlab不需要循环工作,速度会更快;

如果需要修改它在for循环和图片是典型的RGB格式图片的大小是512x512x3

for a=1:512 
    for b=1:512 
     for c=1:3 
      picture(a,b,c) = 255 - picture(a,b,c); 
     end 
    end 
end