這兩天做東西真是諸事不順,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的中文編碼問題。
