標籤:

請教各位朋友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()

需要注意兩個地方:

1.」VideoCapture(videoName)「中「videoName」需要用具體的視頻名;

2.去掉「# coding: utf-8


推薦閱讀:

如何在unity里使用opencv?
【小林的OpenCV基礎課 3】視頻淺淺談
想用OpenCV做AR該如何入手?
[171104] 基於 Python OpenCV 圖像處理的顆粒物計數(如細胞和瓜子計數)
最近在搞Kinect的指尖識別,手指都可以畫出來了,有什麼方法可以將每隻手指對應的名稱識別出來啊?

TAG:OpenCV |