[英]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.