引言
又開一個新的系列分享,對圖像處理感興趣的同學可以關注這個系列。
更新頻率盡量保持一周兩到三次推送。
新系列第一件事兒當然是資源推薦,下面是一些有關 OpenCV 的資源連結:
資源連結:
- 官方網站:https://opencv.org/
- GitHub:https://github.com/opencv/opencv
- 官方文檔:https://docs.opencv.org/
- 中文文檔(非官方):http://www.woshicver.com/
- 官方 Demo :https://github.com/opencv/opencv/blob/master/samples/python
圖書推薦
圖書的話我就推薦一本吧,如果要看書學習絕對不能錯過的「Learning OpenCV 3」,當然,是英文原版的,中文版的話翻譯有點慘不忍睹,對英文閱讀壓力大的同學可以中英文對照着看:
安裝
OpenCV 在 Python 中有兩個類庫,一個是
opencv-python
,另一個是
opencv-contrib-python
。
opencv-python
是隻包含了主要子產品的包,而
opencv-contrib-python
包含了主要子產品以及一些擴充子產品,帶一些收費或者專利的算法,還有一些比較新的算法的進階版本。
安裝的時候選擇自己喜歡的版本裝就好了,指令如下:
# opencv-python 安裝指令pip install opencv-python
# opencv-contrib-pythonpip install opencv-contrib-python
安裝完成後可以通過以下代碼檢視安裝的版本資訊:
import cv2 as cv# 檢視版本資訊print(cv.getVersionString())# 輸出結果4.2.0
我這裡的環境為:
- Python:3.7.4
- opencv-python:4.2.0
圖像的基礎知識
圖像都是由像素( pixel )構成的,就像下面的這種小方格:
這些小方格每一個都有自己明确的位置和被配置設定的色彩值,而這些小方格的顔色和位置就決定了這個圖像所呈現出來的樣子。
像素是圖像中最小的機關,每一個點陣圖像包含了一定量的像素,這些像素決定圖像在螢幕上所呈現的大小。
圖像通常包括有 二值圖像 、 灰階圖像 和 彩色圖像 。
二值圖像
二值圖像就是在圖像中,任何一個點非黑即白,像素要麼為 255 (白色) 要麼為 0 (黑色) 。轉換的時候一般将像素 >=127 的設定為白色,其餘的設定為黑色。
灰階圖像
灰階圖像是除了黑白之外,還添加了第三種顔色:灰色,灰色把灰階劃分為 256 個不同的亮度,例如純白色,它的亮度級别是255。
圖像轉化為灰階圖像有以下幾種算法:
- 浮點算法:Gray = R 0.3 + G 0.59 + B * 0.11
- 整數方法:Gray = ( R 30 + G 59 + B * 11 ) / 100
- 移位方法:Gray = ( R 76 + G 151 + B * 28 ) >> 8
- 平均值法:Gray = ( R + G + B ) / 3
- 僅取綠色:Gray = G
- 權重平均值算法:R = G = B = R 0.299 + G 0.587 + B * 0.144
彩色圖像
彩色圖像是RGB圖像,RGB表示紅、綠、藍三原色,計算機裡所有顔色都是三原色不同比例組成的,即三色通道。
常用圖像示例代碼
上面這三種圖像的示例代碼如下:
import cv2 as cv# 讀取圖像
img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)
cv.imshow("read_img", img)# 灰階圖像
img_gray = cv.cvtColor(img, cv.COLOR_RGB2GRAY)
cv.imshow("gray_img",img_gray)# 二值圖像
ret, binary = cv.threshold(img_gray, 127, 255, cv.THRESH_BINARY)
cv.imshow("binary_img", binary)
cv.waitKey()
OpenCV 入門
1. 讀入圖像
讀取圖像是通過函數
cv.imread()
實作。
文法:
img = cv.imread(檔案名,[,參數])
第二個參數是一個标志,它指定了讀取圖像的方式。
- cv.IMREAD_COLOR: 加載彩色圖像,任何圖像的透明度都會被忽視,如果不傳參數,這個值是預設值。
- cv.IMREAD_GRAYSCALE:以灰階模式加載圖像。
- cv.IMREAD_UNCHANGED:加載圖像,包括alpha通道
注意:這三個标志可以簡化為 1 、 0 、 -1 。
2. 顯示圖像
顯示圖像是通過函數
cv.imshow()
函數實作。
文法:
cv.imshow(視窗名, 圖像名)
3. 視窗等待
顯示圖像是通過函數
cv.waitKey(delay)
函數實作。
文法:
cv.waitKey(delay)
cv.waitKey()
是一個鍵盤綁定函數。其參數是以毫秒為機關的時間。該函數等待任何鍵盤事件指定的毫秒。如果您在這段時間内按下任何鍵,程式将繼續運作。如果 0 被傳遞,它将無限期地等待一次敲擊鍵。
4. 删除視窗
調用函數如下:
cv.destroyAllWindows() 删除所有視窗cv.destroyWindows() 删除指定的視窗
5. 寫入圖像
調用函數如下:
cv.imwrite(檔案位址, 檔案名)
代碼示例
我們讀取一張圖檔,将這張圖檔顯示出來後,再将這張圖檔儲存起來。
import cv2 as cv# 讀取圖檔
img = cv.imread("maliao.jpg", 1)# 顯示圖檔
cv.imshow("demo", img)# 等待輸入
cv.waitKey(0)
cv.destroyAllWindows()# 圖檔寫入
cv.imwrite("demo.jpg", img)
這裡需要注意的是
cv.waitKey(0)
必須要加,如果不等待輸入,整個窗體将會一閃而過。
示例代碼
如果有需要擷取源碼的同學可以在公衆号回複「OpenCV」進行擷取。
參考
https://blog.csdn.net/Eastmount/article/details/81748802
http://woshicver.com/
感謝閱讀