2014-09-06 85 views

回答

2

你可以通过索引来做到这一点。假设您的图像存储在im中,并且您已通过imread读取它。假设你的图像是彩色的,是uint8型的,只需将做到这一点:

im(10,10:12,1) = 0; 
im(10,10:12,2) = 0; 
im(10,10:12,3) = 255; 

这将在第10行,列10改变像素 - 12和修改他们的每一个颜色平面,使红色通道0,绿色通道为0,蓝色通道为255.这将有效地使这三个位置的像素变为蓝色。但是,如果您的图像只是灰度和单个2D矩阵,则在执行上述操作之前,您需要创建颜色版本。这可以通过复制每个通道的每个图像来完成。换句话说:

im = cat(3,im,im,im); 

然后,您可以使用im并为任何希望的像素着色。


如果你想使这个量化的,你当然可以通过使用repmat

im(10,10:12,:) = repmat([0 0 255], 3, 1); 

这将实现与上述相同的结果。


一般情况下,如果你想对任何一个行和列位置的变量数量做到这一点,你可以这样做:

im(row,col1:col2,:) = repmat([c1 c2 c3], col2 - col1 + 1, 1); 

row将是你要找的行因为,col1col2将是您想要更改的开始和结束列,并且[c1 c2 c3]将是要将这些位置设置为的RGB组件的元组。 c1是红色组件,c2是绿色组件,c3分别是蓝色组件。上面的代码将独立于你想要设置的列的数量,只要你不会超出图像的范围!