OpenCV的全稱是Open Source Computer Vision Library,是一個跨平台的電腦視覺庫。OpenCV是由英特爾公司發起並參與開發,以BSD授權條款授權發行,可以在商業和研究領域中免費使用。
在 #機器視覺 專案的開發中,OpenCV作為較大眾的開源庫,擁有了豐富的常用影象處理函式庫,採用C/C 語言編寫,可以執行在Linux/Windows/Mac等作業系統上,能夠快速的實現一些影象處理和識別的任務。此外,OpenCV還提供了Java、 #python 、 #cuda 等的使用介面、機器學習的基礎演算法呼叫,從而使得影象處理和影象分析變得更加易於上手,讓開發人員更多的精力花在演算法的設計上。
以下內容均利用python
進行操作,主要可分為pip
與conda
兩種,分別指令如下。
這裡會自動下載pypi的最新套件內容,這個函數是目前穩定的相關內容,已經驗證過的算式會放入這裡,如果想要使用最新的套件及開發中的套件包,可以安裝這下列版本。
其詳細解說如網站所述。
指令如下,會從conda套件庫下載目前的版本。
其中,利用pip
與conda
下載的版本會略有落差,使用實際得特別注意版本差異。
在python中,匯入OpenCV程式碼如下所示:
由於python是物件導向的程式語言,因此操作上都是利用cv2
這個做為開頭,進行OpenCV的一系列函數操作。
其中flag
可以用下列參數作為輸入
1
代替)
0
代替)
-1
代替)
範例示範
得到結果如下
這裡使用的圖片是大名鼎鼎的萊娜圖
從上述的程式碼中可以發現,由於檔案的副檔名是jpg
的格式,因此本身就已經移除透明度的資料,也因此這裡用cv2.IMREAD_COLOR
與cv2.IMREAD_UNCHANGED
的結果,最終的陣列大小都是一樣**(316×316×3)** 的大小,而使用cv2.IMREAD_GRAYSCALE
的陣列大小就僅有二維,這是因為取值僅取得明度的部分,也因此每一個像素僅只有一個強度值,故最後大小呈現二維的陣列。
值得一提的是利用OpenCV取得的陣列,一順序分別是B
G
R
的資料,在陣列中分別表示[:,:,0]
[:,:,0]
[:,:,2]
的資料順序。
剛才利用OpenCV將影像匯入了程式內,轉換為陣列,現在顯示的功能將影像匯出 指令如下:
其中data
是放入陣列數據。
而這樣的程式碼,一般來說只會讓影像顯示一瞬間就結束程式,故要加入等待指令
括號處可填入停留時間,以毫秒作為單位,若填入0
則會等待使用者按下任意鍵後才進行關閉OpenCV的視窗。
將剛剛匯入的影像再利用cv2.imshow
顯示後的範例:
顯示結果如下:
當開啟多個視窗可利用下列指令來控制關閉的條件
利用這組指令,當按下任意鍵後則會自動關閉所有視窗,若希望可以一時間按照順序關閉指定圖片可利用下列指令進行控制:
最後當我們對影像處理完成後,希望儲存一個新的影像檔案,可利用下列指令進行影像儲存的動作
依序填入儲存位置,及陣列變數名稱,即可針對影像進行儲存 這裡利用將圖片改為負片後存儲下來:
其結果如下:
之後再利用其他深入的使用方式來介紹OpenCV。
#python #OpenCV #程式設計