背景和前景颜色变化

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