OpenCV是一個跨平臺且開源的計算機視覺和機器學習庫,全稱Open Source Computer Vision Library 。由Intel公司開源。其中主體庫的代碼是Intel用C/C++編寫的,部分貢獻庫代碼由社區程式設計師提供。
OpenCV不僅支持多個平臺,同時還提供了多種語言的接口,包括Java、Python、Ruby等。本次課程使用的Python語言。
詳細內容可以查看OpenCV的官網:https://opencv.org/。
2、OpenCV能做什麼?OpenCV中實現了了很多計算機視覺算法,包括基本的圖片運算、閾值處理、圖像濾波、形態學操作等。除此之外,OpenCV還提供了級聯分類器可以用於人臉檢測。
不僅是圖片,OpenCV同時提供了視頻處理相關的操作,下面我們來看看一些案例。
(1)邊緣檢測邊緣檢測的算法有很多,其中Canny算法是當前最優算法,下面圖片就是使用Canny算法實現的邊緣檢測:
可以看到手機的邊緣被完整的展現出來了。對於人像或者其它複雜的圖片Canny也有比較好的表現,下面是人像的邊緣檢測圖:
可以看到手機的邊緣被完整的展現出來了。對於人像或者其它複雜的圖片Canny也有比較好的表現,下面是人像的邊緣檢測圖:
在OpenCV的官網提供了人臉的特徵文件,我們可以使用Haar級聯分類器快速實現人臉檢測的操作,下面是使用OpenCV實現的人臉檢測:
檢測效果還是比較不錯的。
(3)圖像腐蝕腐蝕是最基本的形態學操作之一,我們可以通過腐蝕操作來消除圖片中的一些細小的裂縫,比如下面就是簡單的腐蝕操作的例子:
除了上面這些,OpenCV還要許多其它操作,在後續的文章中會陸續介紹到,下面我們在Python中來安裝一下OpenCV。
3、在Python中安裝OpenCV在Python中想要使用OpenCV非常簡單,我們只需要使用pip安裝一個模塊就好了,語句如下:
pip install opencv-python上面安裝的就是OpenCV的主體庫,也就是Intel公司提供的。我們可以通過下面語句安裝貢獻庫:
pip install opencv-contrib-python不安裝貢獻庫不影響我們使用主體庫的基本功能。
在Python文件中,我們通過下面語句導入OpenCV:
導入後我們就可以使用它了。
4、圖片的讀取讀取圖片的函數格式如下:
retval = cv2.imread(filename, flags=None)現階段我們可以把retval簡單理解為圖片對象。至於flags常用的值可以看下表:
值含義cv2.IMREAD_UNCHANGED格式不變cv2.IMREAD_GRAYSCALE灰度圖cv2.IMREAD_COLOR3通道BGR圖,flags的默認值暫時我們不需要理解各個參數的含義,現階段我們不會使用flags參數。下面我們使用imread函數讀取一張圖片:
import cv2retval = cv2.imread('im.jpg')上面就是讀取圖片的操作了。
5、顯示圖片讀取圖片是最基本的操作,後續的圖像操作都需要先獲取圖片對象,比如接下來要說的顯示圖片。
顯示圖片的操作通常伴隨著等待和銷毀,這麼說你可能不理解,下面我們來看顯示圖片的代碼:
import cv2im = cv2.imread('im.jpg')# 顯示圖片cv2.imshow(im, 'im')cv2.waitKey(0)cv2.destroyAllWindows()上面起主要作用的是imshow函數,它的函數格式如下:
參數的解釋如下:
•winname:顯示圖片的窗口的名稱•mat:圖片對象,就是我們通過imread獲取的圖片對象。
我們可以調用imshow函數顯示圖片,但imshow函數只會為我們顯示一瞬間。我們看到的效果也就是一閃而過的窗口,因此需要配合我們的waitKey函數。waitKey的函數格式如下:
key = waitKey(delay=None)它的作用是等待用戶輸入,它會返回一個鍵盤的ASCII值。配合waitKey函數我們就能讓窗口顯示。
其中delay參數的函數是等待的毫秒數。我們可以選擇不給或者給0,這就表示一直等待。
至於destroyAllWindows函數則是一個常規操作,因為OpenCV是由C/C++編寫的,所以我們需要手動回收窗口的內存。