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