我希望在图像的底部添加另一个包含图像文件名的图像(具有相同的宽度)(基本上,合并两个图像)。如何在2014年之前使用Matlab版本来完成它?
由于
答案 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);
所以要运行新代码块的过程:
设置高度以使文本栏(20看起来很适合默认字体)
制作一个大小为零的
制作一个图形和轴来保持临时图形。总是善于明确这些而不是依赖于' gca'和' gcf'。
在新轴上显示黑条。
在黑条顶部放置一些文字。在这里,您可以使用前两个值来更改位置,以及通常的text()属性。 '口译员'属性使MATLAB不会试图在文件路径上强加LaTeX,这可能会导致过于有趣的结果。
使用getframe()拉出您在轴上创建的伪图像。
关闭临时图。
拉出你在getframe()调用中获得的图像数据,确保它的宽度正确,并将其转换为与你要坚持的图像相同的类在...的底部。
然后像以前一样继续将此栏贴在新图像上并显示附加文字的图像。