更新於 2024/05/24閱讀時間約 2 分鐘

[OpenCV][Python]路徑有中文一樣能讀取圖檔

使用cv2.imread讀取圖片時,如果路徑有包含到中文,就會報錯。

本文將提供另外一個方式cv2.imdecode,路徑有包含到中文時仍可以正常讀取圖片。


測試範例

import cv2

img = cv2.imread('D:/CRABpy/write/圖檔/chars_01.png')

cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

異常報錯​


程式範例

import cv2
import numpy as np


file_path = 'D:/CRABpy/write/圖檔/chars_01.png'
img = cv2.imdecode(np.fromfile(file=file_path, dtype=np.uint8), cv2.IMREAD_COLOR)

cv2.imwrite('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

成功讀取圖

img



語法說明

cv2.imdecode(np.fromfile(file=file_path, dtype=np.uint8), cv2.IMREAD_COLOR)


這種用法主要用來處理檔案路徑包含非 ASCII 字元的情況(例如中文路徑),以及解決某些情況下 OpenCV cv2.imread 讀取圖像失敗的問題。

這個方法的原理是先使用 numpy.fromfile 讀取二進位檔案資料,然後再使用 OpenCV 的 cv2.imdecode 將二進位資料解碼成圖像。這樣可以避免一些路徑編碼問題。

以下是這段程式碼的詳細說明:

  1. np.fromfile(file=file_path, dtype=np.uint8)
    • np.fromfile 用來從檔案中讀取二進位資料。
    • file=file_path 指定檔案路徑。
    • dtype=np.uint8 指定資料型態為 8 位元無符號整數,這是圖像資料的一般型態。
  2. cv2.imdecode
    • cv2.imdecode 用來解碼二進位圖像資料。
    • 第一個參數是二進位資料(由 np.fromfile 讀取)。
    • 第二個參數是cv2.IMREAD_COLOR 表示將圖像解碼為彩色圖像。
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.