Как сохранить изображение, сгенерированное imshow(изображение), в переменную?

Это мой код Я хочу сохранить изображение, отображаемое на imshow(img), в переменную, чтобы использовать его позже. Спасибо!

img=imread('image1.bmp');
figure(1), imshow(img);

[r c]=ginput(4);
Bw=roipoly(img,r,c);
% figure,imshow(Bw)
   [R C]=size(Bw);

for i=1:R
    for j=1:C
        if Bw(i,j)==1
            img(i,j)=img(i,j);
        else
            img(i,j)=0;
        end
    end
end
figure,
imshow(img); title ('Output Image');

1 ответ

Решение

Вы можете использовать классический getframe / cdata идиома. С открытым окном рисунка просто сделайте это:

figure;
imshow(img); title('Output Image');
h = getframe;
im = h.cdata;

h дескриптор текущего кадра, который открыт, и cdata поле содержит данные изображения для кадра. Приведенный выше код сохраняет данные изображения кадра в переменную с именем im для использования на потом.

Незначительный комментарий

Тот for Код цикла для установки вывода немного неэффективен. Вы можете сделать это полностью векторизованным, и вы заметите значительное ускорение.

Этот код:

for i=1:R
    for j=1:C
        if Bw(i,j)==1
            img(i,j)=img(i,j);
        else
            img(i,j)=0;
        end
    end
end

... можно заменить на:

img(~BW) = 0;

Я также не понимаю, почему вам нужно хранить данные изображения в рамке imshow... когда img уже содержит ваши данные, и вы в конечном итоге показывает данные, содержащиеся в img, Почему ты не можешь просто использовать img непосредственно для вашего приложения? Тем не менее, вышеуказанное решение будет работать.

Другие вопросы по тегам