第一章:OpenCV入门
第一章:OpenCV入門
OpenCV是一個開源的計算機視覺庫,1999年有英特爾的Gary Bradski啟動。OpenCV庫由C和C++語言編寫,涵蓋計算機視覺各個領域內的500多個函數,可以在多個操作系統上運行。它旨在提供一個簡潔而又高效的接口,從而幫助共奪得開發人員快速的構建視覺系統。
本章主要介紹OpenCV的簡單使用
圖像處理的基本操作:
圖像處理的最基本操作包括:
- 讀取圖像
- 顯示圖像
- 保存圖像
1. 讀取圖像:
在OpenCV中使用cv2.imread()函數來讀取圖像,該函數支持各種靜態圖像格式。
語法為:retval = cv2.imread( filename[, flags] )
- retval:返回值,讀取到的圖像。如果未讀取到圖像,則返回 None
- filename:表示要讀取的圖像的完整路徑。
- flags:是讀取標記。該標記用來控制讀取文件的類型,具體如下表表示。
注意:表中第一列參數和第三列參數是等價的。即:cv2.IMREAD_UNCHANGED = -1
| cv2.IMREAD_UNCHANGED | 保持原格式不變 | -1 |
| cv2.IMREAD_GRAYSCALE | 將圖像調整為單通道灰度圖像 | 0 |
| cv2.IMREAD_COLOR | 將圖像調整為3通道的BGR圖像。該值是默認值 | 1 |
| cv2.IMREAD_ANYDEPTH | 當載入的圖像深度為16位或者32位時,就返回其對應深度的圖像;否則,將其轉換為8位圖像 | 2 |
| cv2.IMREAD_ANYCOLOR | 以任何可能的顏色格式讀取圖像 | 4 |
| cv2.IMREAD_LOAD_GDAL | 使用gdal驅動程序加載圖像 | 8 |
| cv2.IMREAD_REDUCED_GRAYSCALE_2 | 將圖像轉化為單通道灰度圖像,并將圖像尺寸減小1/2 | |
| cv2.IMREAD_REDUCED_COLOR_2 | 將圖像轉換為3通道BGR彩色圖像,并將圖像尺寸減小1/2 | |
| cv2.IMREAD_REDUCED_GRAYSCALE_4 | 將圖像轉化為單通道灰度圖像,并將圖像尺寸減小1/4 | |
| cv2.IMREAD_REDUCED_COLOR_4 | 將圖像轉換為3通道BGR彩色圖像,并將圖像尺寸減小1/4 | |
| cv2.IMREAD_REDUCED_GRAYSCALE_8 | 將圖像轉化為單通道灰度圖像,并將圖像尺寸減小1/8 | |
| cv2.IMREAD_REDUCED_COLOR_8 | 將圖像轉換為3通道BGR彩色圖像,并將圖像尺寸減小1/8 | |
| cv2.IMREAD_IGNORE_ORIENTATION | 不以EXIF的方向為標記旋轉圖像 |
函數cv2.imread()支持讀取多種不同類型的圖像:
例如:使用cv2.imread()函數讀取圖像
import cv2 lena = cv2.imread("sky.png") print(lena)2. 顯示圖像:
在OpenCV中提供了多個與顯示相關的函數:
-
namedWidow函數:
-
用來創建指定名稱的窗口
-
語法格式:None = cv2.namedWindow( winname ) 式中 winname 指的是創建窗口的名稱
CV2.namedWindow("lesson")
例如創建一個名字為lesson的窗口 -
imshow函數:
- 用來顯示圖像
- 語法格式:None = cv2.imshow( winname, mat ) 式中winname為窗口名稱,mat為要顯示的圖像。
例如:
import cv2 lena = cv2.imread("lena.bmp") cv2.namedWindow("lesson") cv2.imshow("lesson", lena)上述代碼中,首先通過cv2.imread()函數讀取圖像lena.bmp,然后通過cv2.namedWindow()函數創建了一個名為lesson的窗口,最后通過cv2.imshow()函數在lesson窗口中顯示圖像lena.bmp。
注意:在實際使用中也可以不創建窗口,直接使用函數cv2.imshow()引用一個并不存在的創空,并在其中顯示指定的圖像,如:
import cv2 lena = cv2.imread("lena.bmp") cv2.imshow("demo", lena) -
waitKey函數:
- 用來等待按鍵,當用戶按下鍵盤后,該語句會被執行,并返回一個值
- 語法:retval = cv2.waitKey([delay])
- retval:表示返回值。如果沒有按鍵被按下,則返回-1;如果有按鍵備案下則返回該按鍵的ASCII碼
- delay:表示等待鍵盤觸發的時間,單位是ms。當該值為負數或者0時,表示無限等待。默認為0
實際使用中,可以通過函數cv2.waitKey()獲取按下的按鍵,并針對不同的鍵做出不同的反應從而實現交互功能
import cv2 lenam = cv2.imread("lena.png") cv2.imshow("demo", lena) key = cv2.waitKey() if key == ord("A"):CV2.imshow("PressA", lena) elif key == ord("B"):cv2.imshow("PressB", lena) -
destroyWindow函數:
- 用來釋放(銷毀)指定窗口
- 語法:None = cv2.destroyWindow( winname ) winname為窗口名字
-
destroyAllWindows函數
- 用來釋放(銷毀)所有窗口
- 語法:None = cv2.destroyAllWindows()
3. 保存圖像
在OpenCV中使用函數cv2.imwrite()來保存圖像,該函數的語法是:
- retval = cv2.imwrite( filename , img [, params ])
參數:
- retval:返回值。如果保存成功,則返回True;如果失敗,則返回False
- filename:要保存目標文件的完整路徑。
- img:要保存的圖像
- params:保存類型參數,可選。
OpenCV貢獻庫介紹
目前,OpenCV庫包含如下兩部分:
- OpenCV主庫:即通常安裝的OpenCV庫,該庫成熟穩定,有核心的OpenCV團隊維護
- OpenCV貢獻庫:該擴展庫的名稱為opencv_contrib,主要有社區開發和維護,其包含的視覺應用比OpenCV主庫更全面。需要注意的是,OpenCV貢獻庫中包含非OpenCV許可的部分,并且包含專利保護的算法。因此使用該模塊前需要特別注意。
- OpenCV貢獻庫中包含非常多的擴展模塊:
- bioinspired:生物視覺模塊
- datasets:數據集讀取模塊
- dnn:深度神經網絡模塊
- face:人臉識別模塊
- matlab:MATLAB接口模塊
- stereo:雙目立體匹配模塊
- text:視覺文本匹配模塊
- tracking:基于視覺的目標跟蹤模塊
- ximgpro:圖像處理擴展模塊
- xobjdetect:增強2D目標檢測模塊
- datasets:數據集讀取模塊
- dnn:深度神經網絡模塊
- face:人臉識別模塊
- matlab:MATLAB接口模塊
- stereo:雙目立體匹配模塊
- text:視覺文本匹配模塊
- tracking:基于視覺的目標跟蹤模塊
- ximgpro:圖像處理擴展模塊
- xobjdetect:增強2D目標檢測模塊
- xphoto:計算 攝影擴展模塊
總結
以上是生活随笔為你收集整理的第一章:OpenCV入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存中压缩图片
- 下一篇: 【转】GIS:为什么我和别的软件不一样