使用Python OpenCV读取/加载包含Unicode字符(中文、日文、韩文)的图像路径

3
我有一个图片目录,每个图片的名称中都带有一个汉字。我想列出所有这些图片,遍历列表,读取并显示每张图片。
图片路径类似于 https://github.com/sirius-ai/LPRNet_Pytorch/tree/master/data/test 在 Python3.6.9 中,使用 glob 获取到的图片名称如下:

enter image description here

当我使用cv2.imread读取它们时,会导致分段错误

我该如何解决这个问题?

2个回答

3

一种方法是使用np.fromfile()将图像转换为一个一维的ndarray,然后使用cv2.imdecode()将其转换为普通的三维BGR格式的图像。根据您的图像格式(如果它具有透明度),您可以更改解码标志。查看此处以获取完整的标志列表。

import cv2
import numpy as np
import glob

for path in glob.glob("images/*.jpg"):
    # Image is in BGR format
    image = cv2.imdecode(np.fromfile(path, dtype=np.uint8), cv2.IMREAD_UNCHANGED)
    cv2.imshow('image', image)
    cv2.waitKey(1000)

在此输入图片描述

注意:它似乎适用于任何Unicode图像文件(中文,日文,韩文,俄文等)。


谢谢,这解决了我的时间问题。ChatGPT-4甚至无法解决这个问题,尤其是当图像路径中有中文字符或特殊符号时。谢谢。 - undefined

0
这不是一个OpenCV问题,而是获取您的文件名的正确字符串表示。我们可以深入探讨所有这些工作原理,但这种问题应该在python3中解决,所以首先:您确定正在使用python3而不是python2吗?如果您确定,我会跟进。

Comparison

跟进: 如果你执行这两个命令,你也会得到一个段错误吗?
wget https://raw.githubusercontent.com/sirius-ai/LPRNet_Pytorch/master/data/test/%E4%BA%ACPL3N67.jpg

python3 -c 'import cv2; import glob; print(cv2.imread(glob.glob("*")[0]).shape)'

你应该在屏幕上看到 (800,800,3) 的输出。

如果没有,那么 python3 -c 'import subprocess; subprocess.call(["ls"])' 输出什么?可能是你下载的文件保存为“字节名称”。


是的,我正在使用Python 3.6.9。 - Fadwa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接