請教各位朋友cv2的python版本中imwrite無法生成帶有中文路徑的圖片?
我的環境是:cv2+python3.4,
我寫了一個保存幀為圖片的python代碼
# coding: utf-8
import cv2
cap =
cv2.VideoCapture(videoName)
frameList = []
name = "./藍天/1.jpeg"while(cap.isOpened()):
ret , frame = cap.read()if ret ==
True:
frameList.append(frame)else:break
outimg = cv2.imwrite(name , frameList[0] , [int(cv2.IMWRITE_JPEG_QUALITY), 100])
cap.release()當前目錄下的目錄「藍天」也創建了,但是下面沒有生成」1.jpeg」這個圖片
好像是cv2不支持中文請教各位朋友有什麼辦法,在此謝過。
# python3版本
# imread
path_file = "sample"
img = cv2.imdecode(np.fromfile(path_file,dtype=np.uint8),-1)
#imwrite
_path = "sample"
cv2.imencode(.jpg,img)[1].tofile(_path)
# python 2版本
import cv2
import sys
reload(sys)
sys.setdefaultencoding(u8)
path_file = u"sample"
img = cv2.imread(path_file.decode(u8).encode(gbk),-1)
由於python3字元串採用utf8編碼,cv2.imread將utf8當作本地碼(如GBK),這個問題無解了。Python 2.7可以用decode/encode的方法(包括崔鳴浩用的默認GBK編碼)解決,此方法在Python 3中已不能用了。
可以採用以下方法代替
# imread
img = cv2.imdecode(np.fromfile(unicode_path, dtype=np.uint8), flags)# imwrite
cv2.imencode(.jpg, img)[1].tofile(unicode_path)imencode/imdecode包含了imwrite/imread的參數謝邀,我測試的環境是opencv2.4.9+python2.7首先說明一點,題主所說的「cv2不支持中文」是不正確的,題主這裡的問題應該是python字元編碼的問題;運行下面的代碼應該是可以得到你想要的結果:
import cv2
cap = cv2.VideoCapture("demo_iccv13.avi")
frameList = []
name = "./藍天/1.jpeg"
while(cap.isOpened()):
ret , frame = cap.read()
if ret == True:
frameList.append(frame)
else:
break
outimg = cv2.imwrite(name , frameList[0], [int(cv2.IMWRITE_JPEG_QUALITY), 100])
cap.release()
推薦閱讀:
※如何在unity里使用opencv?
※【小林的OpenCV基礎課 3】視頻淺淺談
※想用OpenCV做AR該如何入手?
※[171104] 基於 Python OpenCV 圖像處理的顆粒物計數(如細胞和瓜子計數)
※最近在搞Kinect的指尖識別,手指都可以畫出來了,有什麼方法可以將每隻手指對應的名稱識別出來啊?
TAG:OpenCV |