1. 程式人生 > >python2及python3下關於cv2讀取中文路徑下的圖片以及在圖片上顯示中文的問題

python2及python3下關於cv2讀取中文路徑下的圖片以及在圖片上顯示中文的問題

1.python2下讀取中文路徑圖片

示例如下:

import cv2

img_path = '劉昊然.jpg ' #圖片和py檔案放在一個資料夾下,所以不用寫絕對路徑

im = cv2.imread(img_path.decode(‘utf-8'))

2.python3下讀取中文路徑圖片

示例如下:

import numpy as np

import cv2

img_path=‘ 劉昊然.jpg’

image = cv2.imdecode(np.fromfile(img_path,dtype = np.uint8),-1)

#將圖片寫入到中文路徑

save_path =  ' '

cv2.imencode('.jpg',image)[1].tofile(save_path)

3.藉助PIL(Python Imaging Library)模組實現

python2下:image = Image.open("劉昊然.jpg".decode('utf8'))

python3下:image = Image.open("劉昊然.jpg") 

4.在圖片上顯示中文

示例:(python2下,若需要在python3下實現,則將下面註釋掉的紅色程式碼部分取消註釋即可)

import cv2 import numpy as np from PIL import Image, ImageDraw, ImageFont

im = Image.open("劉昊然.jpg".decode('utf8')) # 字型 linux下字型*.ttc的存放路徑一般是: /usr/share/fonts/opentype/noto/ 可用指令查詢locate *.ttc 

#windows下字型的存放位置為C:\Windows\Fonts,把字型檔案複製過來即可 font = ImageFont.truetype('msyh.ttc', 40)  fillColor = (255,0,0)  position = (100,100)  strname = '劉昊然'   # 需要先把輸出的中文字元轉換成Unicode編碼形式  #if not isinstance(strname, str)

: #Python2 的unicode 函式在 Python3 中被命名為 str if not isinstance(strname, unicode):   strname = strname.decode('utf8')    draw = ImageDraw.Draw(im)  draw.text(position, strname, font=font, fill=fillColor)    img_OpenCV = cv2.cvtColor(np.asarray(im),cv2.COLOR_RGB2BGR) #PIL讀取圖片和OpenCV讀取rgb圖片的三個通道順序不同 cv2.imshow("print chinese to image",img_OpenCV)  cv2.waitKey() 

總之都是編碼的問題啦,下面是一個關於python不同編碼的詳解