给图像一个黑色背景?

时间:2012-02-07 15:26:56

标签: image matlab image-processing opencv

有没有办法在MATLAB中删除白色背景并将其变成黑色?

说我有这个形象:

enter image description here

当我应用答案中建议的代码时,我得到以下输出:哪个不完美

enter image description here

4 个答案:

答案 0 :(得分:6)

安德烈注意到的问题是,并非所有背景像素都是“255白色”。这可能是由于JPEG压缩算法而发生的,也是因为图像中有水果的阴影。

要解决这个问题,首先通过模糊图像获取水果区域的二进制掩码(这是克服JPEG伪像所必需的)然后以非常高的值对图像进行阈值处理,但略低于255.这里是Matlab中的解决方案:

I = imread('http://i.stack.imgur.com/5p4jV.jpg'); % Load your image.
H = fspecial('gaussian'); % Create the filter kernel.
I = imfilter(I,H); % Blur the image.

Mask = im2bw(Ig, 0.9); % Now we are generating the binary mask.
I([Mask, Mask, Mask]) = 0; % Now we have the image.

这是输出(您也可以在im2bw中尝试不同的阈值):

enter image description here

答案 1 :(得分:2)

由于抗锯齿效果使图像边缘模糊,因此失败。这些未被删除的像素不是255!他们有点低。基本上你有两个选择:

(我是从使用Matlab的角度写的。)

  1. 使用imfreehand选择相关部分,然后通过从API调用createMask创建一个掩码。
  2. 找到正确的阈值水平,而不是255.(更难 - 如果可能的话)
  3. 这是第一个的Matlab代码:

    function SO1
        im = imread('c:\x.jpg');
        figure();
        imshow(im);
        f = imfreehand();
        mask = f.createMask();
        mask = repmat(mask,[1 1 3]);
        im(~mask) = 0;
        figure;imshow(im);
    end
    

答案 2 :(得分:0)

您应该将图像绘制为黑色背景。

//Your bitmap
Bitmap originalImage = new Bitmap(100, 100);

//Black background
Bitmap bitmap = new Bitmap(100, 100);
Graphics g = Graphics.FromImage(bitmap);

//Draw the background
g.FillRectangle(Brushes.Black, 0, 0, 100, 100);

//Draw the original bitmap over the black one
g.DrawImage(originalImage, 0, 0);

答案 3 :(得分:-1)

是肯定的。 如果您的图像保存为名为img的变量:

thr = 255;
mask = sum(img,3)==thr*3;
for i=1:3
    c = img(:,:,i);
    c(mask)=0;
    img(:,:,i)=c;
end

| - )