cv2 imwrite 和德语字母(“ä, ü, ö”)

Posted

技术标签:

【中文标题】cv2 imwrite 和德语字母(“ä, ü, ö”)【英文标题】:cv2 imwrite and german letters ("ä, ü, ö") 【发布时间】:2019-06-08 22:29:14 【问题描述】:

我写了一个脚本来在python中使用cv2来操作一些图片。 现在我需要保存这些文件,但有些文件名包含德语字母("ä, ü, ö")。 不幸的是,cv2function 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)

【讨论】:

谢谢!转换为 PIL 图像,然后使用“.save()”方法解决了我的问题! 很高兴它有帮助! 对于使用相同方法解决此类问题的任何人,请记住:cv2 使用 BGR 编码颜色,而 PIL 使用 RGB。解决这个使用:cv2_im = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) img_pil = Image.fromarray(cv2_im) img_pil.save(spath)

以上是关于cv2 imwrite 和德语字母(“ä, ü, ö”)的主要内容,如果未能解决你的问题,请参考以下文章

PDF中的德语变音符号

德语的最佳 MySQL 排序规则是啥

CakePHP 2.1:德语变音符号的 Sluggable 行为

CoreData 错误存储包含 ä、ö、ü、ß 的字符串

cv2.waitKey(25) & 0xFF == ord('q'): 和 cv2.imwrite() 不工作

OpenCV 函数学习02-图像的保存(cv2.imwrite)