2014-10-14 2 views
-1

Я хочу добавить к нижней части изображения другое изображение (с той же шириной), которое содержит имя файла изображения (в основном, слияние двух изображений). Как я могу это сделать с версией Matlab до 2014 года?Добавить имя файла к изображению - Matlab

Благодаря

+0

http://stackoverflow.com/questions/11726071/how-to-embed-a-watermark-on-an-image-using-edge-in-matlab http://www.mathworks.com/matlabcentral/ ответы/67364-how-can-i-watermark-an-image http://www.mathworks.com/matlabcentral/answers/102312-is-it-possible-to-add-a-timestamp-watermark-to-my -image-in-matlab-7-6-r2008a – Cheery

ответ

2

У вас есть два 3d и вы матриц, необходимо добавить один к нижней части другого. Довольно просто сделать:

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) 

Edit: фактическое изображение может хорошо быть в 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); 

Чтобы получить, скажем, черная полоса в нижней части изображения с именем файла на нем (и без дополнительных файлов или компьютерного зрения Toolbox), вы могли бы сделать что-то вроде этого:

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(). Свойство Interpreter позволяет MATLAB пытаться навязать LaTeX путь к файлу, что может привести к чрезмерно интересным результатам.

  6. Используйте getframe(), чтобы вытащить псевдоопределение, которое вы создали в своих осях.

  7. Закрыть временную фигуру.

  8. Извлеките данные изображения, которые вы получили в вызове getframe(), убедившись, что это правая ширина, и нарисуйте его в том же классе, что и изображение, которое вы собираетесь придерживать на дне.

Затем, как и прежде, придерживайте эту панель на новом изображении и отобразите текст с добавлением изображения.

+0

+1 - Это правильно. Хорошо идет! – rayryeng

+0

Спасибо, потому что есть различия в классе, когда я использую реальный образ, что мне нужно исправить? Кроме того, как я могу поместить текст в img2? Код: image = imread ('C: \ Users \ Winzar \ Desktop \ a.JPG '); [высота, ширина] = размер (изображение); img2 = единицы (высота, ширина, 3); img3 = [изображение; img2]; imshow (img3); – user2916044

+0

Забыл иметь дело с классом раньше, но это легко исправить. См. Edit, как справиться с этим и создать текстовое изображение. – Staus

Смежные вопросы