Как хранить данные изображения по умолчанию в Matlab GUI - PullRequest
0 голосов
/ 14 мая 2018

У меня есть изображение, прикрепленное в качестве логотипа для моего графического интерфейса, в настоящее время перед открытиемFcn я использую imread для получения логотипа.

Но я хочу переместить свой код между различными компьютерами и не планирую иметьизображение логотипа вместе с гидом.Можно ли определить функцию, которая создает изображение, которое я хочу?

Как,

imgData = createImg(); % function call

function imgData = createImg()
% imgData = imread('peppers.png'); % usual way
imgData = % idk do something to have it in this function definition.
end

Обновление: Я следовал тому, что вы сказали

imgData = imread('logo_Img.png');
csvwrite('imgDataLogical.txt',logical(imgData(:,:,1)));

function logical_idx = my_createImg()
% imgData = imread('peppers.png'); % usual way
logical_idx = [... % data...]; % data from txt file
end


logical_img = my_createImg();
[red_img,green_img,blue_img] = deal(uint8(255*(logical_img == 1)));
red_img(logical_img == 1) = 220; red_img(logical_img ~= 1) = 230;
green_img(logical_img == 1) = 20; green_img(logical_img ~= 1) = 230;
blue_img(logical_img == 1) = 60; blue_img(logical_img ~= 1) = 230;
fullImg = cat(3,red_img,green_img,blue_img);
figure, imshow(fullImg)

Я думаю, что это написано довольно плохо.

Любые идеи, чтобы сделать это хорошо.

Спасибо,

Гопи

1 Ответ

0 голосов
/ 14 мая 2018

Самый простой способ сделать это - скопировать и вставить данные в M-файл.

Ваш M-файл будет выглядеть следующим образом:

function imgData = createImg()
% imgData = imread('peppers.png'); % usual way
imgDataR = [...
   43, 86, 43, 54, 123, 43, 132, ... (etc.)
];
imgDataG = [...
   ... (more data here)
];
imgDataB = [...
   ... (more data here)
];
imgData = cat(3, imgDataR, imgDataG, imgDataB);
end

Чтобы сгенерировать этоданные, прочитайте изображение и запишите его в текстовый файл, используя csvwrite:

imgData = imread('peppers.png');
csvwrite('imgDataR.txt',imgData(:,:,1));
csvwrite('imgDataG.txt',imgData(:,:,2));
csvwrite('imgDataB.txt',imgData(:,:,3));

А затем откройте эти текстовые файлы и скопируйте и вставьте данные в ваш M-файл.


Хотя, если у вас есть логотип, у вас, вероятно, мало цветов.Может быть, лучше сохранить его в виде индексной матрицы и цветовой карты.Но принцип будет таким же.

Чтобы использовать цветовую карту, сделайте следующее:

function logical_idx = my_createImg()
% imgData = imread('peppers.png'); % usual way
index = [... % data...]; % should have values 1 and 2
colmap = uint8([220,20,60; 230,230,230]);
imgData = colmap(index,:);
imgData = reshape(imgData,[size(index),3]);
end

Ваша матрица index должна иметь значения 1 и 2 (или более высокие числа, если у вас естьбольше цветов).Чтобы перейти к имеющейся у вас логической матрице, просто добавьте 1. Вы используете эту матрицу для индексации в карте цветов.Затем вам нужно изменить форму вывода, чтобы иметь правильные размеры.

...