How to save the image WITHOUT the white background using imwrite (advanced problem)
14 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Salad Box
el 3 de Sept. de 2019
Hi
RGB = imread('bird1.png');
figure
imshow(RGB)
Then I get:
Then:
s = size(RGB);
rectangle('position',[1 1 s(2) s(1)], 'edgecolor', [1 0 0])
rectangle('position',[0 0 s(2) s(1)], 'edgecolor', [1 0 0])
I get:
Now I would like to save this image WITHOUT the white background, only the content within the red box (including the red box).
Imwrite needs to use 'RGB', however after the red box been added onto the image, RGB is no longer the original RGB. It WON'T be correct just to use
imwrite(RGB, 'bird1.png');
Could anyone provide correct solution to this question please?
3 comentarios
Adam
el 3 de Sept. de 2019
Ah well, that is different! None of the images you previously showed had any white background outside the red rectangle so I assumed you meant the white within it.
Respuesta aceptada
Image Analyst
el 3 de Sept. de 2019
Try this:
% To burn the color into the image itself.
[rows, columns, numberOfCOlorChannels] = size(RGB)
RGB(:, 1, 1:3) = repmat([255, 0, 0], rows, 1);
RGB(:, end, 1:3) = repmat([255, 0, 0], rows, 1);
RGB(1, :, 1:3) = repmat([255, 0, 0], columns, 1);
RGB(end, :, 1:3) = repmat([255, 0, 0], columns, 1);
imshow(RGB);
imwrite(RGB, filename);
It's much more robust than saving the bitmap in the overlay, which is subject to change whenever you resize the figure window.
1 comentario
Más respuestas (1)
Johannes Fischer
el 3 de Sept. de 2019
% read image as NxMx3 rgb matrix
RGB = imread('bird1.png');
imshow(RGB)
s = size(RGB);
rectangle('position',[1 1 s(2) s(1)], 'edgecolor', [1 0 0])
rectangle('position',[0 0 s(2) s(1)], 'edgecolor', [1 0 0])
% get a handle of the axis
F = getframe(gca);
% and save the color information of the axis, which is stored as RGB in
% the field 'cdata'
imwrite(F.cdata, 'bird2.png')
5 comentarios
Johannes Fischer
el 3 de Sept. de 2019
Interesting... it seems to be larger by one pixel in row or column dimension, depending on the input size. I thought it would keep the size as long as no resizing is performed.
But you're right, you're solution is more robust, and in terms of batch processing probably much faster.
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!