1 說明
本篇中使用的opencv版本為3.3,python使用的版本為3.6。
2.問題描述
本人小白一枚,由于畢業論文做圖像識别方面的内容,是以最近才開始學習python,老師指導我用opencv做圖檔去噪處理,是以最近才知道opencv是幹嘛用的,opencv才安裝好,想嘗試一下簡單的使用opencv讀取、顯示和存儲一個圖檔。然而一開始就給了我一個下馬威。
開始代碼如下,隻涉及到圖檔的讀取和顯示:
# -*- coding: utf-8 -*-
import cv2
if __name__=='__main__':
path='E:/畢業設計/images/百合1.jpg'
img=cv2.imread(path,1)
cv2.namedWindow(image,cv2.WINDOW_AUTOSIZE)
cv2.imshow(image,img)
k=cv2.waitKey(0)
運作後報了這個錯誤:
cv2.imshow('image',img)
cv2.error: C:\projects\opencv-python\opencv\modules\highgui\src\window.cpp:325: error: (-215) size.width>0 && size.height>0 in function cv::imshow
百度了一下:原因是因為檔案路徑錯誤,未讀取到圖檔。但是我反複确認我的圖檔路徑沒有錯誤,是以想到會不會是中文的字元編碼問題導緻讀取不到圖檔,于是我在D盤下放了一張英文命名的圖檔,就修改了代碼的path改為‘D:/ Hydrangeas.jpg’,再次運作上述代碼,結果如下:
成功讀取并顯示,則表明我的猜想是正确的,是因為路徑的中文編碼導緻圖檔讀取不成功。
3.解決辦法
但是可惜的是,小白我并沒有解決辦法,于是又問度娘,尋找python3中opencv讀取中文名稱的解決辦法。
最後在一個知乎的問答中找到了答案:
連結如下:https://www.zhihu.com/question/67157462/answer/251754530
我嘗試了,果然能成功讀取中文路徑與中文名稱的圖檔,事實證明該方法是正确的。然而這位答主的回答居然沒有贊,我果斷的給她點了個贊,不知為何題主竟然都沒贊。
然後又在另一個知乎問答下發現了另一個,包括opencv讀取和存儲中文名稱和路徑的方法:
附上連結:https://www.zhihu.com/question/47184512
嘗試後,果然都是對的,感謝知乎,感謝兩位大佬!
附上我修改後的代碼:
# -*- coding: utf-8 -*-
import cv2
import numpy as np
## 讀取圖像,解決imread不能讀取中文路徑的問題
def cv_imread(filePath):
cv_img=cv2.imdecode(np.fromfile(filePath,dtype=np.uint8),-1)
## imdecode讀取的是rgb,如果後續需要opencv處理的話,需要轉換成bgr,轉換後圖檔顔色會變化
##cv_img=cv2.cvtColor(cv_img,cv2.COLOR_RGB2BGR)
return cv_img
if __name__=='__main__':
path='E:/images/百合/百合1.jpg'
img=cv_imread(path)
cv2.namedWindow('lena',cv2.WINDOW_AUTOSIZE)
cv2.imshow('lena',img)
k=cv2.waitKey(0)
##這樣是儲存到了和目前運作目錄下
cv2.imencode('.jpg', img)[1].tofile('百合.jpg')