1. 問題
專案需要用opencv實作影像的讀取和變化,讀取影像時卻一直顯示影像型別為NoneType,
def data_aug(img_path,path,count):
print(img_path)
img = cv2.imread(img_path)[:,:,::-1] #imread回傳回從指定檔案加載的影像,
#出錯:TypeError: 'NoneType' object is not subscriptable
明明輸出路徑在檔案夾中能夠打開,在程式中卻運行不起來,這是為什么呢?
2. 解決
其實原理很簡單,就是:cv2不能識別中文名的路徑,
img_path中存在中文路徑,因此無法成功讀取,這個坑在去年暑假初學opencv的時候網課老師專門強調過,但當時并沒有在意,導致現在花了很長時間尋找錯誤,
解決方法就是先用先用np.fromfile()讀取為np.uint8格式,再使用cv2.imdecode()解碼,
當然,這樣太麻煩了,于是果斷放棄opencv,轉向PIL,
修改代碼后,結果頻頻報錯,原因是兩個庫雖然都是影像處理,但函式不一樣呀!后面影像的變化需要呼叫opencv的函式,于是還是選用cv,
于是在網上找到一個自制函式的方法,可以保存下來,每次都這樣使用,避免出錯,
def cv_imread(file_path):
cv_img = cv2.imdecode(np.fromfile(file_path, dtype=np.uint8), cv2.IMREAD_COLOR)
return cv_img
結果展示:
pth=r"D:\2021年\清醒紀\學校課程\目標檢測-比賽\NTS-Net\CUB_200_2011\images\002.Laysan_Albatross\Laysan_Albatross_0006_702.jpg"
import numpy as np
img_path=r"D:\2021年\清醒紀\學校課程\目標檢測-比賽\避免泄露_資料集\latest_data\00.戰斗機\1001.jpg"
def cv_imread(file_path):
cv_img = cv2.imdecode(np.fromfile(file_path, dtype=np.uint8), cv2.IMREAD_COLOR)
return cv_img
img=cv_imread(img_path)
cv2.imshow("jj",img)
cv2.waitKey()
#成功顯示圖片!!
3. 強調
cv.imread函式能夠成功讀取非中文路徑的圖片,不接受non-ascii的路徑,所以,路徑中有中文的,請增加函式,
當然,個人認為為了避免不必要的麻煩,程式員應該與英語交朋友,將所有命名統一為英語,這樣在使用國外開源專案的時候會減少很多修正錯誤的時間(而且這種錯誤往往不易發現)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/294323.html
標籤:其他
