Python 圖像處理 OpenCV (1):入門


引言

又開一個新的系列分享,對圖像處理感興趣的同學可以關注這個系列。

更新頻率盡量保持一周兩到三次推送。

新系列第一件事兒當然是資源推薦,下面是一些有關 OpenCV 的資源鏈接:

資源鏈接

圖書推薦

圖書的話我就推薦一本吧,如果要看書學習絕對不能錯過的「Learning OpenCV 3」,當然,是英文原版的,中文版的話翻譯有點慘不忍睹,對英文閱讀壓力大的同學可以中英文對照着看:

安裝

OpenCV 在 Python 中有兩個類庫,一個是 opencv-python ,另一個是 opencv-contrib-python

opencv-python 是只包含了主要模塊的包,而 opencv-contrib-python 包含了主要模塊以及一些擴展模塊,帶一些收費或者專利的算法,還有一些比較新的算法的高級版本。

安裝的時候選擇自己喜歡的版本裝就好了,命令如下:

# opencv-python 安裝命令
pip install opencv-python

# opencv-contrib-python
pip 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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM