cv2 imwrite и немецкие буквы ("ä, ü, ö")

Я написал скрипт для манипулирования некоторыми картинками с cv2 в питоне.
Теперь мне нужно сохранить эти файлы, но некоторые имена файлов содержат немецкие буквы ("ä, ü, ö"),
К сожалению похоже cv2функция imwrite() не может справиться с этим и записывает имена файлов как Bögen вместо Bögen.
Я пытался преобразовать pathname в UTF-8 и другие кодировки через

path.encode("utf-8")

но это только приводит к

"TypeError: bad argument type for built-in operation"

У кого-нибудь есть опыт с такими проблемами?

1 ответ

Решение

К сожалению, OpenCV imwrite Метод поддерживает только символы ASCII.

Для отображения символов UTF-8 нам нужно использовать библиотеку PIL.

Смотрите пример ниже, реализуя новую функцию print_utf8 простое решение для этой задачи:

import numpy as np
import cv2
from PIL import Image, ImageDraw, ImageFont

def print_utf8(image, text, color):  
    fontName = 'FreeSerif.ttf'
    font = ImageFont.truetype(fontName, 18)  
    img_pil = Image.fromarray(image)  
    draw = ImageDraw.Draw(img_pil)  
    draw.text((0, image.shape[0] - 30), text, font=font,
           fill=(color[0], color[1], color[2], 0)) 
    image = np.array(img_pil) 
    return image

img = cv2.imread("myImage.png")

color = (255, 0, 0) #red text
img_with_text = print_utf8(img, "ä, ü, ö",color)
cv2.imshow('IMAGE', img_with_text)
cv2.waitKey(0)
Другие вопросы по тегам