我有一个JPEG图像,我想更改图像中3个相邻像素的颜色,例如蓝色。假设给出这些像素的位置,如(10,10), (10,11), (10,12)
。在MATLAB中给出像素位置的像素颜色更改
有关我们如何在MATLAB中做到这一点的任何想法?
我有一个JPEG图像,我想更改图像中3个相邻像素的颜色,例如蓝色。假设给出这些像素的位置,如(10,10), (10,11), (10,12)
。在MATLAB中给出像素位置的像素颜色更改
有关我们如何在MATLAB中做到这一点的任何想法?
你可以通过索引来做到这一点。假设您的图像存储在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
将是你要找的行因为,col1
和col2
将是您想要更改的开始和结束列,并且[c1 c2 c3]
将是要将这些位置设置为的RGB组件的元组。 c1
是红色组件,c2
是绿色组件,c3
分别是蓝色组件。上面的代码将独立于你想要设置的列的数量,只要你不会超出图像的范围!