背景和前景颜色变化
Background and foreground color changes
您好,我需要将背景颜色设为黑色,前景颜色设为白色。如您所见,我通过将图像转移到二维来做到这一点。我想让这个颜色在 3 维中发生变化,所以我们也不允许将它转换为黑白。有什么办法吗?
logo=imread('logo.png');
subplot(2,2,1);
imshow(logo);
b=rgb2gray(logo);
subplot(2,2,2);
imshow(b);
c=im2bw(b,0.92)
subplot(2,2,3);
imshow(c);
c = 1-c;
subplot(2,2,4);
imshow(c);
前言:
要将像素设置为白色或黑色,需要将像素的每一层的强度值设置为 0(黑色)或 255(白色)。
白色像素 → rgb(255,255,255)
黑色像素 → rgb(0,0,0)
冒号可以用来获取第3维的所有索引(抓取所有层)。要在图像的 top-left 角抓取一个 RGB-pixel:
RGB_Pixel = Image(1,1,:);
方法一:
如果您希望保留三个颜色通道,您可以使用矩阵索引将白色背景更改为黑色。矩阵索引也可用于将非白色的任何地方更改为白色。不幸的是,如果您有一个带有 255
强度分量的彩色分量,则此方法可能会失败。不过,您的图像似乎并非如此。您可以使用方法 2 以获得更安全的方法。
logo = imread('logo.png');
[Image_Height,Image_Width,Depth]= size(logo);
new_logo = zeros(Image_Height,Image_Width,Depth);
new_logo(logo == 255) = 0;
new_logo(logo ~= 255) = 255;
imshow(new_logo);
方法二:
使用一组扫描整个图像的 for-loops 检查每个像素 (RGB-triplet)。如果像素的 RGB-intensities 为 rgb(255,255,255)
,则像素设置为 0 (black)
。如果像素的 RGB-intensities 是任何其他像素,则像素设置为 255 (white)
。 ~ismember()
函数用于检查 RGB-pixel 是否具有不是 255 (not-white)
.
的强度
logo = imread('logo.png');
%Grabbing the size of the image%
[Image_Height,Image_Width,~]= size(logo);
for Row = 1: Image_Height
for Column = 1: Image_Width
%Grabbing RGB pixel%
RGB_Pixel = logo(Row,Column,:);
if(~ismember(255,RGB_Pixel))
%RGB pixel is white change
logo(Row,Column,:) = 255;
else
%RGB pixel is coloured change to black%
logo(Row,Column,:) = 0;
end
end
end
imshow(logo);
使用 repmat()
函数也是上述评论建议的一个很好的解决方案。这可能是最快的方法,因为您已经有了从灰度图像生成一层的代码。
运行 使用 MATLAB R2019b
您好,我需要将背景颜色设为黑色,前景颜色设为白色。如您所见,我通过将图像转移到二维来做到这一点。我想让这个颜色在 3 维中发生变化,所以我们也不允许将它转换为黑白。有什么办法吗?
logo=imread('logo.png');
subplot(2,2,1);
imshow(logo);
b=rgb2gray(logo);
subplot(2,2,2);
imshow(b);
c=im2bw(b,0.92)
subplot(2,2,3);
imshow(c);
c = 1-c;
subplot(2,2,4);
imshow(c);
前言:
要将像素设置为白色或黑色,需要将像素的每一层的强度值设置为 0(黑色)或 255(白色)。
白色像素 → rgb(255,255,255)
黑色像素 → rgb(0,0,0)
冒号可以用来获取第3维的所有索引(抓取所有层)。要在图像的 top-left 角抓取一个 RGB-pixel:
RGB_Pixel = Image(1,1,:);
方法一:
如果您希望保留三个颜色通道,您可以使用矩阵索引将白色背景更改为黑色。矩阵索引也可用于将非白色的任何地方更改为白色。不幸的是,如果您有一个带有 255
强度分量的彩色分量,则此方法可能会失败。不过,您的图像似乎并非如此。您可以使用方法 2 以获得更安全的方法。
logo = imread('logo.png');
[Image_Height,Image_Width,Depth]= size(logo);
new_logo = zeros(Image_Height,Image_Width,Depth);
new_logo(logo == 255) = 0;
new_logo(logo ~= 255) = 255;
imshow(new_logo);
方法二:
使用一组扫描整个图像的 for-loops 检查每个像素 (RGB-triplet)。如果像素的 RGB-intensities 为 rgb(255,255,255)
,则像素设置为 0 (black)
。如果像素的 RGB-intensities 是任何其他像素,则像素设置为 255 (white)
。 ~ismember()
函数用于检查 RGB-pixel 是否具有不是 255 (not-white)
.
logo = imread('logo.png');
%Grabbing the size of the image%
[Image_Height,Image_Width,~]= size(logo);
for Row = 1: Image_Height
for Column = 1: Image_Width
%Grabbing RGB pixel%
RGB_Pixel = logo(Row,Column,:);
if(~ismember(255,RGB_Pixel))
%RGB pixel is white change
logo(Row,Column,:) = 255;
else
%RGB pixel is coloured change to black%
logo(Row,Column,:) = 0;
end
end
end
imshow(logo);
使用 repmat()
函数也是上述评论建议的一个很好的解决方案。这可能是最快的方法,因为您已经有了从灰度图像生成一层的代码。
运行 使用 MATLAB R2019b