python3中cv2.imread返回NoneType的解決方法


這兩天做東西真是諸事不順,caffe各種爆炸,今天在轉換數據集格式的時候python又炸了,具體情況如下:

環境anacond3,python3,opencv3,

代碼中cv2.imread(train_filepath)后返回NoneType,百度了一圈大都是說路徑不對,opencv-python包不對之類的問題,於是我仔細檢查各種路徑沒有問題后,將anaconda到各種包全update了一遍,結果悲傷逆流成河,問題並沒有解決。

把圖片放到程序同目錄下用相對路徑打開后發現沒有問題,於是將問題鎖定在路徑上。這時注意到我的路徑中有中文,python一向在中文支持上令人心碎,這時將關鍵詞鎖定在python imread 中文路徑上,於是發現了一種解決方案:

cv2.imread(srcfile.encode('gbk'))

結果。。。。。依然杯具。。。。。

就在我即將原地爆炸的時候,發現了另一篇文章,文章中說上述解決方法是針對python2的,在python3中由於python3字符串采用utf8編碼,cv2.imread將utf8當作本地碼(如GBK),因此替代方案如下:

# imread
img = cv2.imdecode(np.fromfile(u'x:/中文路徑/xx.jpg', dtype=np.uint8), flags)  #flags=cv2.IMREAD_COLOR...
#imwrite
cv2.imencode('.jpg', img)[1].tofile(u'x:/中文路徑/xx.jpg')

順利解決。

再次吐槽py的中文編碼問題。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM