App下載

人工智能和機器學習系列(五) OpenCV庫

陪你演戲 2021-08-24 11:23:03 瀏覽數 (5323)
反饋

簡介

OpenCV 是一個用于(實時)圖像處理的庫,該模塊簡要介紹了 OpenCV 并演示了其對象檢測功能。這是我們學習 Python 及其在機器學習和 AI 中的應用系列中的第五個模塊。在上一個模塊中,我們認識了許多ML和AI中相關的Python庫,下面就一起來深入研究一下這些庫的使用,我們先開始學習OpenCV的使用。

安裝

OpenCV 可以通過 pip 安裝,方法是在 Jupyter Notebook 單元中運行以下命令:

!pip install --upgrade opencv-python

pip 是 Python 的默認包管理器和獨立的可執(zhí)行文件,但以這種方式運行它可確保將包安裝到 Anaconda 環(huán)境中。

如果軟件包安裝正確,此 Python 代碼應該可以正常運行:

import cv2

因為我們要在我們的 Jupyter Notebook 中顯示圖像,我們還應該確保matplotlib已安裝:

!pip install --upgrade matplotlib

讀取和繪制圖像

讀取 OpenCV 可以處理的圖像很簡單:

import cv2
im = cv2.imread("path/to/image.jpg")

OpenCV 支持多種圖像格式,當解析圖像失敗時,結果imread將是None. 請注意,如果未找到圖像文件,則不會引發(fā)錯誤 - 結果也會如此None。

假設找到了圖像,然后我們可以使用matplotlib. 為此,我們將使用此輔助函數:

from matplotlib import pyplot
def plot_img(img):
    rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    pyplot.imshow(rgb)

OpenCV 讀取 BGR 顏色格式的圖像,但?matplotlib?希望它們是 RGB,所以首先我們必須轉換圖像。然后就可以繪制了。

您可以按如下方式使用此功能:

plot_img(im)

OpenCV 和?matplotlib?集成如此干凈是因為 OpenCV 圖像實際上只是一個包含像素值的多維 NumPy 數組,并且?matplotlib?可以使用它。

圖 1

物體檢測

很多是OpenCV的可以做。我們將特別關注對象檢測。

對象檢測與所謂的級聯分類器一起工作。這種方法使用機器學習:分類器在包含所需對象的圖像(正圖像)和不包含它的圖像(負圖像)上進行訓練。您可以訓練自己的分類器,但 OpenCV 還提供了幾個可從其 GitHub 下載的預訓練模型。

讓我們試試俄羅斯車牌的預訓練分類器haarcascade_russian_plate_number.xml。如果您想要測試圖像,可以使用Sergey Rodovnichenko 的 Lada Vesta 圖像。

我們可以讀取圖像并繪制它以查看是否一切順利,就像以前一樣:

car = cv2.imread("Pictures/lada-vesta.jpg")
plot_img(car)

圖 2

接下來,我們創(chuàng)建分類器:

蟒蛇復制代碼

classifier = cv2.CascadeClassifier()
classifier.load("path/to/haarcascade_russian_plate_number.xml")

圖 3

檢測工作是通過以下?detectMultiScale?方法完成的:

plates = classifier.detectMultiScale(car)

這將返回一個 NumPy 數組。它實際上是一個數組數組,每個內部數組都是檢測到的板的矩形邊界,格式為?[ x, y, width, height ]?. 為了直觀地顯示它們,我們可以在圖像上繪制矩形,然后繪制結果:

with_indicators = car
for plate in plates:
    x, y, width, height = plate
    with_indicators = cv2.rectangle(with_indicators, (x, y), 
                                    (x + width, y + height), 
                                    (0, 0, 255), 5)

矩形函數采用圖像、左上角坐標、右下角坐標、顏色和厚度。它返回一個帶有矩形的新圖像。我們可以繪制結果:

plot_img(with_indicators)

圖 4

這個例子展示了 OpenCV 的針對俄羅斯車牌的預訓練分類器,但這并不是唯一可用的分類器。還有用于面部、眼睛等的預訓練分類器,它們的使用方式與該分類器完全相同。

結論

我們只是觸及了 OpenCV 功能的皮毛。OpenCV 具有更多處理功能(轉換、過濾器、2D 特征檢測等),并且可以實時處理視頻幀?;ヂ摼W上有很多關于 OpenCV 的資料。該官方教程是一個良好的開端,但你也可以找到很多的幫助,如果你想與OpenCV的解決問題專門進行搜索。


0 人點贊