将文件名添加到图像 - Matlab

时间:2014-10-14 22:07:25

标签: matlab

我希望在图像的底部添加另一个包含图像文件名的图像(具有相同的宽度)(基本上,合并两个图像)。如何在2014年之前使用Matlab版本来完成它?

由于

1 个答案:

答案 0 :(得分:2)

你有两个3d matricies,你需要将一个附加到另一个的底部。非常简单明了:

img1 = cat(3, rand(50, 50), rand(50,50), rand(50,50)); % Placeholder for image file data
img2 = ones(10, 50, 3); % Placeholder for text-containing image
img3 = [img1; img2]; % Stick them together
imshow(img3); % Show the generated image (here color noise with a white bar at the bottom)

编辑:实际图像可能在uint8或uint16中,而不是MATLAB默认的双类。为此,包含文本的图像需要位于同一个类中。可以在调用ones()函数中指定类。

img1 = imread('c:\path\to\class\imgName.tif');
imgCls = class(img1); % determine class of loaded image
[height, width] = size(img1);
img2 = ones(FNameHeight, width, 3, imgCls); 
img3 = [img1; img2];
imshow(img3);

比如,在图像底部有一个带有文件名的黑条(没有额外的文件或计算机视觉工具箱),你可以这样做:

imgFileName = 'C:\Users\Public\Pictures\Sample Pictures\koala.jpg';
img1 = imread(imgFileName);
imgCls = class(img1); % determine class of loaded image
[height, width, depth] = size(img1);

BarHeight = 20; % Height of black bar in pixels
blackBar = zeros(BarHeight, width, 3);
tempImg = figure();
tempAxes = axes('Parent', tempImg);
imshow(blackBar, 'Parent', tempAxes);
text(5, 1, imgFileName, 'color', 'w', 'VerticalAlignment', 'top', 'Interpreter', 'none');
textFrame = getframe(tempAxes);
close(tempImg);
img2 = cast(textFrame.cdata(:, 1:width, :), imgCls);

img3 = [img1; img2];
imshow(img3);

所以要运行新代码块的过程:

  1. 设置高度以使文本栏(20看起来很适合默认字体)

  2. 制作一个大小为零的

  3. 制作一个图形和轴来保持临时图形。总是善于明确这些而不是依赖于' gca'和' gcf'。

  4. 在新轴上显示黑条。

  5. 在黑条顶部放置一些文字。在这里,您可以使用前两个值来更改位置,以及通常的text()属性。 '口译员'属性使MATLAB不会试图在文件路径上强加LaTeX,这可能会导致过于有趣的结果。

  6. 使用getframe()拉出您在轴上创建的伪图像。

  7. 关闭临时图。

  8. 拉出你在getframe()调用中获得的图像数据,确保它的宽度正确,并将其转换为与你要坚持的图像相同的类在...的底部。

  9. 然后像以前一样继续将此栏贴在新图像上并显示附加文字的图像。