Скрипт Python для генерации текста с точками из любого изображения

Опубликовано: 24 Марта, 2022

Предварительные требования: Python OpenCV

В этой статье мы увидим, как мы можем использовать Python3 для создания пунктирного текста, представляющего изображение. Мы используем такие тексты в сообщениях и социальных сетях, и создание их - интересная задача обработки изображений.

Эта задача потребует от нас определения краев данного изображения. После этого мы можем использовать любой символ, например «.», «O» или «x», чтобы отображать яркие и темные пиксели.

  • Сначала создайте новый скрипт python и установите открытое резюме.
 python3 -m pip установить opencv-python --user
  • Теперь импортируйте cv2 и загрузите изображение, которое хотите преобразовать. Здесь имя изображения - «mic.jpg», и оно находится в том же каталоге. Нам нужно использовать изображение в режиме оттенков серого, поэтому укажите дополнительный параметр для загрузки в режиме оттенков серого.
 # импортировать необходимые модули
импорт cv2

# Прочитать изображение
img = cv2.imread ('mic.jpg', 0)
  • Мы можем уменьшить шум на изображении, чтобы скругленные углы и края распознавались плавно. Для этого мы можем использовать метод medianblur () из cv2.
 # Применить медианное размытие
img = cv2.medianBlur (img, 5)
  • Для определения границ в openCV доступны различные функции определения пороговых значений. Но наиболее совместимым в данном случае является ADAPTIVE_THRESH_MEAN_C. Кроме того, мы можем проверить и другие пороговые функции.
 # Примените пороговое значение MEAN, чтобы получить четкие края
изображение = cv2.adaptiveThreshold (img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11,2)

Теперь у нас есть изображение, имеющее только края. Мы можем перебирать наше изображение, чтобы напечатать яркие и темные точки, и это сгенерирует для нас пунктирный текст. Если изображение слишком велико, мы можем использовать cv2.resize (), чтобы уменьшить изображение, чтобы его можно было использовать.

Реализация :

Python3

# Python script to convert the given image
# into a dotted text using opencv
  
# import the required modules
import cv2
  
# Read the image
img = cv2.imread("mic.jpg", 0)
  
# Apply median blur
img = cv2.medianBlur(img, 5)
  
# Apply MEAN thresholding to get refined edges
image = cv2.adaptiveThreshold(
    img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
  
# Convert the image into a compatible size
# We will use 60 pixels wide image so that text
# fits in the console
  
# Preserve the ratio
ratio = len(image)/len(image[0])
# Assign new width and calculate new height
new_width = 60
new_height = int(ratio*new_width)
# Resize the image
image = cv2.resize(image, (new_height, new_width))
  
# Iterate over the array and print the dark pixels
# or we can use any other symbol too.
for i in range(len(image)):
    for j in range(len(image[0])):
        print("o" if image[i, j] < 100 else ".", end="")
    print()
  • Исходное изображение:

  • Изображение в градациях серого после применения медианного размытия:

  • Изображение после применения адаптивного среднего порога:

  • Окончательный вывод, напечатанный на консоли:

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.