【計算機視覺處理1】OpenCV入門
OpenCV入門
1、什么是OpenCV?
OpenCV是一個跨平臺且開源的計算機視覺和機器學習庫,全稱Open Source Computer Vision Library 。由Intel公司開源。其中主體庫的代碼是Intel用C/C++編寫的,部分貢獻庫代碼由社區程序員提供。
OpenCV不僅支持多個平臺,同時還提供了多種語言的接口,包括Java、Python、Ruby等。本次課程使用的Python語言。
詳細內容可以查看OpenCV的官網:[https://opencv.org/][https://opencv.org/]。
2、OpenCV能做什么?
OpenCV中實現了了很多計算機視覺算法,包括基本的圖片運算、閾值處理、圖像濾波、形態學操作等。除此之外,OpenCV還提供了級聯分類器可以用于人臉檢測。
不僅是圖片,OpenCV同時提供了視頻處理相關的操作,下面我們來看看一些案例。
(1)邊緣檢測
邊緣檢測的算法有很多,其中Canny算法是當前最優算法,下面圖片就是使用Canny算法實現的邊緣檢測:
可以看到手機的邊緣被完整的展現出來了。對于人像或者其它復雜的圖片Canny也有比較好的表現,下面是人像的邊緣檢測圖:
(2)人臉檢測
在OpenCV的官網提供了人臉的特征文件,我們可以使用Haar級聯分類器快速實現人臉檢測的操作,下面是使用OpenCV實現的人臉檢測:
檢測效果還是比較不錯的。
(3)圖像腐蝕
腐蝕是最基本的形態學操作之一,我們可以通過腐蝕操作來消除圖片中的一些細小的裂縫,比如下面就是簡單的腐蝕操作的例子:
除了上面這些,OpenCV還要許多其它操作,在后續的文章中會陸續介紹到,下面我們在Python中來安裝一下OpenCV。
3、在Python中安裝OpenCV
在Python中想要使用OpenCV非常簡單,我們只需要使用pip安裝一個模塊就好了,語句如下:
pip install opencv-python
1
上面安裝的就是OpenCV的主體庫,也就是Intel公司提供的。我們可以通過下面語句安裝貢獻庫:
pip install opencv-contrib-python
1
不安裝貢獻庫不影響我們使用主體庫的基本功能。
在Python文件中,我們通過下面語句導入OpenCV:
import cv2
1
導入后我們就可以使用它了。
4、圖片的讀取
讀取圖片的函數格式如下:
retval = cv2.imread(filename, flags=None)
1
retval:返回的圖片對象(numpy.ndarray類型),如果讀取失敗返回None。
filename:文件名稱,為必選參數。
flags:讀取標記,用來控制文件讀取的類型,我們可以選擇不給它傳值。
現階段我們可以把retval簡單理解為圖片對象。至于flags常用的值可以看下表:
暫時我們不需要理解各個參數的含義,現階段我們不會使用flags參數。下面我們使用imread函數讀取一張圖片:
import cv2 retval = cv2.imread('im.jpg')
1
2
上面就是讀取圖片的操作了。
5、顯示圖片
讀取圖片是最基本的操作,后續的圖像操作都需要先獲取圖片對象,比如接下來要說的顯示圖片。
顯示圖片的操作通常伴隨著等待和銷毀,這么說你可能不理解,下面我們來看顯示圖片的代碼:
import cv2 im = cv2.imread('im.jpg') # 顯示圖片 cv2.imshow(im, 'im') cv2.waitKey(0) cv2.destroyAllWindows()
1
2
3
4
5
6
上面起主要作用的是imshow函數,它的函數格式如下:
imshow(winname, mat)
1
參數的解釋如下:
winname:顯示圖片的窗口的名稱
mat:圖片對象,就是我們通過imread獲取的圖片對象。
我們可以調用imshow函數顯示圖片,但imshow函數只會為我們顯示一瞬間。我們看到的效果也就是一閃而過的窗口,因此需要配合我們的waitKey函數。waitKey的函數格式如下:
key = waitKey(delay=None)
1
它的作用是等待用戶輸入,它會返回一個鍵盤的ASCII值。配合waitKey函數我們就能讓窗口顯示。
其中delay參數的函數是等待的毫秒數。我們可以選擇不給或者給0,這就表示一直等待。
至于destroyAllWindows函數則是一個常規操作,因為OpenCV是由C/C++編寫的,所以我們需要手動回收窗口的內存。
OpenCV
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。