2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 [MATLAB] Добавление текста и линий в массив изображения
Сообщение04.04.2021, 05:34 


07/01/12
69
Есть ли средства в матлабе в массив изображения (который, например, визуализируется с помощью imshow) добавлять текст и линии?

Речь идет не о том чтобы просто посмотреть на картинку с моими добавлениями в окне figure матлаба, а именно о добавлении в массив, который потом можно сохранить в файл (imwrite).
Допустим, с линиями я справлюсь программно попиксельно, а вот с текстом... посложнее.

 Профиль  
                  
 
 Re: [MATLAB] Добавление текста и линий в массив изображения
Сообщение04.04.2021, 18:01 
Заслуженный участник


12/07/07
4438
Функция insertText. (По крайней мере, в R2013b уже есть и работает).

Upd. В очень старых версиях можно использовать экспорт
Используется синтаксис Matlab M
>> p = imread('d:\8Ma.jpg');
>> text(10, 10, '8!!!')
>> print -f1 -djpeg 'd:\88.jpg'
В сохранённом файле будет исходное изображение (8Ma.jpg) и текст '8!!!'.
Для теста в Matlab 6.5 использована картинка из сообщения с поздравлением

 Профиль  
                  
 
 Re: [MATLAB] Добавление текста и линий в массив изображения
Сообщение04.04.2021, 18:41 


10/03/16
3855
Aeroport
GAA в сообщении #1512823 писал(а):
Функция insertText

Ничоси!! Не знал, спасибо огромное. А иные графические примитивы можно, типа прямоугольников, стрелочек и т.п.?

-- 04.04.2021, 18:47 --

P.S. Кстати, сейчас подумал: можно же вывести в figure изображение функцией imshow, затем дорисовать все что нужно и записать в файл принтом?

 Профиль  
                  
 
 Re: [MATLAB] Добавление текста и линий в массив изображения
Сообщение04.04.2021, 18:55 


07/01/12
69
text не годится (см. 2-й абзац 1-го поста).

GAA в сообщении #1512823 писал(а):
Функция insertText. (По крайней мере, в R2013b уже есть и работает).

Я видел в инетах эту штуку. Мой R2014a ее не знает. М.б. для нее какой-то тулбокс нужно подключить?
Но показалось, что это тоже не то.

GAA в сообщении #1512823 писал(а):
В очень старых версиях можно использовать экспорт

А можно уточнить?

ozheredov в сообщении #1512830 писал(а):
P.S. Кстати, сейчас подумал: можно же вывести в figure изображение функцией imshow, затем дорисовать все что нужно и записать в файл принтом?

Это не годится -- см. 1-ю строчку этого поста.

 Профиль  
                  
 
 Re: [MATLAB] Добавление текста и линий в массив изображения
Сообщение04.04.2021, 19:03 


10/03/16
3855
Aeroport
Diusha
Тут где-то было мое сообщение про импортируемые java-классы, которые позволяют сделать то, что Вам нужно, несколько "обходным" путем. То ли сообщение не отправилось, то ли в последствии кем-то стерлось. Интересует?

 Профиль  
                  
 
 Re: [MATLAB] Добавление текста и линий в массив изображения
Сообщение04.04.2021, 19:35 


07/01/12
69
ozheredov в сообщении #1512834 писал(а):
Интересует?


Даааа

 Профиль  
                  
 
 Re: [MATLAB] Добавление текста и линий в массив изображения
Сообщение04.04.2021, 19:36 
Заслуженный участник


12/07/07
4438
Diusha в сообщении #1512832 писал(а):
Мой R2014a ее не знает. М.б. для нее какой-то тулбокс нужно подключить?
По ссылке из моего первого сообщения в теме: "Introduced in R2013a". Если установлена полная справка, то в ней есть соответствующе описание. Computer Vision System Toolbox.
ozheredov в сообщении #1512830 писал(а):
Ничоси!! Не знал, спасибо огромное. А иные графические примитивы можно, типа прямоугольников, стрелочек и т.п.?
По ссылке из моего первого сообщения в теме: insertShape('Rectangle', 'FilledRectangle', 'Line', 'Polygon', 'FilledPolygon', 'Circle', 'FilledCircle'). Стрелок нет, но из 'Line' можно попробовать соорудить (возможно будет коряво). Или создать новый объект.

 Профиль  
                  
 
 Re: [MATLAB] Добавление текста и линий в массив изображения
Сообщение04.04.2021, 19:50 


07/01/12
69
GAA в сообщении #1512838 писал(а):
Если установлена полная справка, то в ней есть соответствующе описание.

Да, это, конечно, именно то, что нужно.
Наверно, справка установлена на те тулбоксы, которые сами установлены, и в ней такого нет.
А откуда известно про R2013a?

 Профиль  
                  
 
 Re: [MATLAB] Добавление текста и линий в массив изображения
Сообщение04.04.2021, 20:12 
Заслуженный участник


12/07/07
4438
Diusha в сообщении #1512840 писал(а):
А откуда известно про R2013a?
GAA в сообщении #1512838 писал(а):
По ссылке из моего первого сообщения в теме: "Introduced in R2013a".
<…>
Introduced in R2013a
<…>


 !  Постоянный бан за троллинг участнику ozheredov был заменён на месячный с условием блокировки навсегда в случае продолжения им нарушений правил форума.

Учитывая многочисленны последующие блокировки [1 неделя (Ende), недельная и месячная блокировка (photon), «два месяца за множественный флуд, оффтопик и провокационные сообщения» ( Pphantom)], за систематический флуд в тематических разделах ozheredov заблокирован навсегда.
(Upd. Исправлена ссылка)

 Профиль  
                  
 
 Re: [MATLAB] Добавление текста и линий в массив изображения
Сообщение04.04.2021, 22:33 
Заслуженный участник


12/07/07
4438
Diusha в сообщении #1512832 писал(а):
А можно уточнить?
Виноват. Копируя из командного окна, пропустил одно предложение. Полностью должно быть так
Используется синтаксис Matlab M
>> p = imread('d:\8Ma.jpg');
>> imshow(p)
>> text(10, 10, '8!!!')
>> print -f1 -djpeg 'd:\88.jpg'

В справке пакета указаны варианты форматов (не обязательно jpeg). Но я стараюсь сохранять в векторные форматы, если для печати. (При печати векторных не будут буквы "корявыми".)

 Профиль  
                  
 
 Re: [MATLAB] Добавление текста и линий в массив изображения
Сообщение05.04.2021, 08:19 


07/01/12
69
GAA в сообщении #1512858 писал(а):
Копируя из командного окна, пропустил одно предложение.

Я и не заметил, что в коде пропущен imshow, а то, что строка про экспорт относится именно к этому коду, не понял, поэтому и попросил уточнения :lol:

insertText -- то, что нужно.
Спасибо.
Остается только разобраться, почему его у меня нет.

 Профиль  
                  
 
 Re: [MATLAB] Добавление текста и линий в массив изображения
Сообщение05.04.2021, 19:35 
Заслуженный участник


12/07/07
4438
 i  После обсуждения в кругу модераторов я признал свою ошибку. Участник ozheredov разблокирован. Приношу свои извинения.

 Профиль  
                  
 
 Re: [MATLAB] Добавление текста и линий в массив изображения
Сообщение05.04.2021, 19:37 


07/01/12
69
Доустановил Computer Vision System Toolbox, заработало! :D
Еще раз спасибо!

 Профиль  
                  
 
 Re: [MATLAB] Добавление текста и линий в массив изображения
Сообщение07.04.2021, 11:19 


07/01/12
69
insertText работает, но не выводит кириллицу. Как-то можно это вылечить?
Предполагаю, что это связано с невозможностью менять фонты (эта возможность введена, кажется, с R2015b (у меня R2014a)), а единственный фонт, который там по умолчанию, без кириллицы.
Можно ли что-то сделать?

 Профиль  
                  
 
 Re: [MATLAB] Добавление текста и линий в массив изображения
Сообщение07.04.2021, 22:50 
Заслуженный участник


12/07/07
4438
Я не знаю способа вылечить insertText.
Если писать свою функцию insertText лень, то можно воспользоваться вариантом с экспортом.
Если экспортировать изображение, то вокруг него в файле, по крайней мере в R2013, будет белый бордюр (изображение будет окружено белой рамкой).
Возможен такой вариант.
1. Получив, размеры исходного изображения, выводим на рисунок с белым фоном только текст (функция text).
2. Экспортируем этот рисунок с текстом в файл.
3. Считываем файл, вырезаем фрагмент с рисунком, увеличиваем контрастность.
4. Накладываем изображение текста на исходное "изображение".

На скорую руку, где-то так
код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
p = imread('d:\8Ma.jpg');
[H, W, D] = size(p);
BG = uint8(255*ones(H, W, 3));
imshow(BG);
text(10,10, '8 марта!')
print -f1 -djpeg -r0 'd:\88Ma.jpg'
pp = imread('d:\88Ma.jpg');
imshow(pp);
[ii, jj] = find(pp(:, :, 1) < 128);
d = pp(min(ii):max(ii), min(jj):max(jj), 1) < 127;
[m, n] = size(d);
for i = 1:m
 for j = 1:n
  if d(i, j)
   p(10+i, 10+j, :) = 0;  
  end    
 end
end
imshow(p);

Вложение:
txt2img.PNG
txt2img.PNG [ 86.84 Кб | Просмотров: 0 ]

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group