如何在 Matlab GUI 中默认存储图像数据

How to have image data stored defaultly inside Matlab GUI

我附加了一张图像作为我的 GUI 的徽标,目前,在 OpeningFcn 之前,我正在使用 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)

我觉得这篇写的很烂

任何让它变得更好的想法。

谢谢,

果皮

最简单的方法是将数据复制粘贴到 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。您可以使用此矩阵对颜色映射进行索引。然后您需要重塑输出以具有正确的尺寸。