我有一个图像附加为我的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)
我认为这写得非常糟糕。
任何让它变得更好的想法。
谢谢,
戈皮
答案 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.您可以使用此矩阵索引颜色映射。然后,您需要重新整形输出以获得正确的大小。