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

时间:2018-05-14 16:57:20

标签: matlab matlab-guide

我有一个图像附加为我的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)

我认为这写得非常糟糕。

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

谢谢,

戈皮

1 个答案:

答案 0 :(得分:2)

最简单的方法是将数据复制粘贴到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.您可以使用此矩阵索引颜色映射。然后,您需要重新整形输出以获得正确的大小。