前置條件
說明:本系列opencv實戰教程將從基礎到實戰,若只是簡單學習完python也可以通過該教程完成一般的機器學習編程;文中將會對很多python的基礎內容進行講解,但由于文章定位的原因將不會贅述過多的基礎內容,基礎內容進行第一次講解后第二次將不會過多贅述,本文主要講解的是opencv相關知識。
本文系統及環境:本文將在windows7操作系統下以python作為編程語言,完成對opencv的程序編寫。python版本是3.8。
目錄
[python opencv 計算機視覺零基礎到實戰] 一、opencv的helloworld
[【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭讀取] 一、opencv的helloworld
[[python opencv 計算機視覺零基礎到實戰] 三、numpy與圖像編輯] 一、opencv的helloworld
[[python opencv 計算機視覺零基礎到實戰] 四、了解色彩空間及其詳解] 一、opencv的helloworld
[[python opencv 計算機視覺零基礎到實戰] 五、對象追蹤] 一、opencv的helloworld
一、學習目標
- 安裝opencv
- 了解什么是計算機視覺
- 了解讀取圖片的方法
- 了解顯示圖片的方法
二、完成opencv的helloworld程序編寫
2.1 opencv是什么
要了解opencv是什么,首先可以看opencv的全程——Open Source Computer Vision Library,翻譯過來為“開源的計算機系統識別庫”。那計算機視覺指的是什么呢?
計算機視覺并不是指計算機可以去查看某些東西,這個說法太過片面,并不嚴謹;計算機視覺其實是研究如何讓計算機去代替人去觀察,并且進行一些目標上的處理。在opencv中,集成了很多方法,可以讓我們開發者很容易的完成某些視覺上的操作,完成某些目標;通過opencv,可以讓我們無需了解太多的算法知識,簡便的進行開發。
2.2 opencv可以做什么
opencv應用廣泛,例如人臉識別、車牌識別、機器人、指紋、文字等,還可以對圖片信息進行方便的編輯,例如可以模糊圖片、檢測目標等;我們可以通過學習opencv可以做一個“檢測老板面部自動切屏程序”、“類似于圖片摳圖等圖片操作的軟件”、“自動駕駛”等。
2.3 opencv的安裝
opencv的安裝很簡單,使用pip命令安裝即可。命令如下:
pip install opencv-python
安裝完成后可以在cmd黑框框中進入python命令的交互界面,引入opencv即可知道是否已經安裝成功。步驟如下:
首先輸入python進入python命令的交互界面:
隨后輸入命令import cv2,引入OpenCV庫:
若此時并未出錯,則說明opencv安裝正確。
其中import表示引入,import cv2表示引入cv2這個模塊,cv2是模塊名;其中import的作用是引入。
2.4 opencv的helloworld
opencv的helloworld程序跟一般的helloworld程序不同,指讀取一張圖片并且顯示。我們打開自己的編輯器,我使用的編輯器是notepad。
opencv讀取圖片使用的是imread方法,在imread方法傳入一張圖片的路徑即可讀取到該圖片,但需要注意的是,在讀取圖片時,路徑不能出現中文、文件名最好是中文、在傳入時還需要注意斜桿會轉義,盡量的加r使文件路徑不轉義。查看以下示例:
img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')
以上代碼讀取一張路徑為“C:\Users\mx\Desktop\1.jpg”的圖片,并且賦值給img變量,這是img則為改圖片對象。隨后顯示該變量內容需要先創建一個窗口,名為ImageShow,使用namedWindow方法。代碼如下:
cv2.namedWindow("Image")
namedWindow接收2個參數,一個為窗口名稱,另一個為顯示方式;顯示方式包括cv.WINDOW_AUTOSIZE與*cv.WINDOW_NORMAL,默認情況下是cv.WINDOW_AUTOSIZE;默認情況下并不能改變窗口大小,若圖片太大,將會對查看造成一定的影響,使用cv.WINDOW_NORMAL則可以對窗口大小進行拖動更改,將會方便我們的查看。我們將以上代碼更改,代碼如下:
cv2.namedWindow("Image",cv.WINDOW_NORMAL)
接下來我們將顯示圖像,使用imshow方法。代碼如下:
cv2.imshow("Image", img)
imshow方法接收2個參數,第一個是我們需要在哪個窗口顯示的名稱,第二個是讀取后的圖片對象img。若在上一步中不創建窗口Image,在使用imshow方法時依舊可以直接顯示,此時將會創建一個當前所命名的窗口。接下來需要添加一個等待,防止程序運行完后自動關閉。代碼如下:
cv2.waitKey (0)
接下來關掉窗口,調用destroyAllWindows方法,該方法將會銷毀所有創建的窗口:
cv2.destroyAllWindows()
也可以使用destroyWindow方法銷毀指定的窗口,如下代碼:
cv2.destroyWindow("Image")
以上完整的代碼如下:
import cv2img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')#讀取
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)#創建一個窗口
cv2.imshow("Image", img)#顯示圖像
cv2.waitKey (0)#等待關閉
cv2.destroyAllWindows()#destroy
運行代碼,將會出現圖片:
以上圖片左上角為title頭,是窗口名稱,并且改圖片可以拖動改變大小。我們更改imshow代碼,使其指定到一個未創建的窗口進行顯示:
import cv2img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')#讀取
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)#創建一個窗口
cv2.imshow("Image1", img)#顯示圖像
cv2.waitKey (0)#等待關閉
cv2.destroyAllWindows()#destroy
運行結果如下:
我們發現,這時創建了一個Image1窗口,該窗口顯示了該圖片內容,并且不能改動大小;我們使用namedWindow創建的Image窗口并沒有指定顯示內容,所以導致顯示內容無,但是可以自動改變大小,這時因為我們創建該窗口時傳入了cv2.WINDOW_NORMAL選擇了可自由改變大小。這時可通過這個小例子很好的對比cv2.WINDOW_NORMAL與cv2.WINDOW_AUTOSIZE的區別。
這時也可以改變代碼:
import cv2img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')#讀取
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)#創建一個窗口
cv2.imshow("Image1", img)#顯示圖像
cv2.destroyWindow("Image")
cv2.waitKey (0)#等待關閉
cv2.destroyAllWindows()#destroy
以上代碼中在waitKey 之前使用了destroyWindow方法對無用的Image窗口進行了銷毀,運行時將會不再出現Image窗口。
注:文章首發于ebaina
三、總結
- 了解了安裝opencv 的命令 pip install opencv-python
- 了解計算機視覺是研究如何讓計算機去代替人去觀察,并且進行一些目標上的處理
- 了解讀取圖片的方法imread
- 了解顯示圖片的方法imshow
- 了解窗口創建的多個模式WINDOW_NORMAL與WINDOW_AUTOSIZE
- 了解了銷毀所有窗口的方法destroyAllWindows與銷毀指定窗口的方法destroyWindow