繁体   English   中英

使用 Python OpenCV 在图像路径(中文、日文、韩文)中读取/加载带有 unicode 字符的图像

[英]Read/load images with unicode characters in image path (Chinese, Japanese, Korean) with Python OpenCV

我有一个图像目录,每个图像的名称中都有一个汉字。 我正在尝试列出所有图像,在列表上循环,阅读并显示每个图像。

图像路径类似于https://github.com/sirius-ai/LPRNet_Pytorch/tree/master/data/test

python3.6.9 中使用glob ,图像名称是这样的

在此处输入图片说明

当我用cv2.imread读取它们时导致Segmentation Fault

我怎么解决这个问题?。

这不是OpenCV问题,而是获取文件名的正确字符串表示形式。 我们可以深入研究所有这些是如何工作的,但是这样的问题应该在python3 ,所以首先:你确定你使用的是python3而不是python2吗? 如果你确定,我会跟进。

比较

跟进:所以如果你执行这两个命令,你是否也会得到 Seg Fault?

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"])'是什么python3 -c 'import subprocess; subprocess.call(["ls"])' python3 -c 'import subprocess; subprocess.call(["ls"])'给你? 可能是您刚刚下载的文件以“字节名称”保存。

一种方法是使用np.fromfile()将图像转换为 1-D ndarray然后使用cv2.imdecode()将其转换为普通的 3-D 形状的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 图像文件(中文、日文、韩文、俄文等)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM