訂閱
糾錯
加入自媒體

Python中OpenCV的基礎(chǔ)知識

從安裝到基本圖像處理

OpenCV 是一個流行的開源計算機(jī)視覺庫,可用于不同的編程語言,例如 Python、C++ 和 JavaScript。它提供了一套豐富的工具來處理和分析圖像和視頻,讓你可以從調(diào)整單張圖片的大小到構(gòu)建復(fù)雜的對象識別應(yīng)用程序。

Python 編程語言除了被廣泛用作大多數(shù)圖像處理和計算機(jī)視覺應(yīng)用程序的標(biāo)準(zhǔn)外,還允許以非常直接的方式將 OpenCV 安裝在你的計算機(jī)中。

在本教程中,我將向你展示使用 OpenCV 安裝、設(shè)置和對圖像執(zhí)行一些基本操作所需的步驟,重點介紹有關(guān)該庫背后概念的重要基礎(chǔ)知識。

值得一提的是,這些步驟是在基于 Linux 的操作系統(tǒng)中使用Python3執(zhí)行的。因此,如果你使用不同的配置,則可能需要進(jìn)行細(xì)微的更改。

設(shè)置虛擬環(huán)境

使用 Python 時,通常建議在虛擬環(huán)境中運行你的應(yīng)用程序。這樣做,你可以只安裝運行應(yīng)用程序所需的包,使其獨立于系統(tǒng)的其余部分。如果你的計算機(jī)上仍然沒有安裝虛擬環(huán)境工具,我建議你安裝以下工具。

python3 -m pip install virtualenv

安裝后,你可以使用此工具創(chuàng)建新的虛擬環(huán)境。為此,導(dǎo)航到你想要的目錄并運行以下命令。請注意,我為我的環(huán)境選擇了名稱 my_venv,但你可以選擇任何你想要的名稱。

python3 -m venv my_venv

最后,你只需要激活你的虛擬環(huán)境,以便你在此終端中運行的任何內(nèi)容都將在其中完成。

source my_venv/bin/activate

安裝 OpenCV

首先更新你的包管理器并為 Python3 安裝 OpenCV。

sudo apt update

sudo apt install python3-opencv

然后,使用 pip 在你的虛擬環(huán)境中安裝 OpenCV。

pip install opencv-python

打開圖像

使用你最喜歡的 IDE,創(chuàng)建一個擴(kuò)展名為 .py 的新文件,然后從導(dǎo)入 OpenCV 類開始

import cv2

我們在這里做的第一件事是使用 imread() 方法加載圖像并使用 imshow() 方法打開它。請將下面的路徑替換為你的圖片所在的路徑。

image = cv2.imread("images/messi.jpg")

cv2.imshow("Original image", image)

原始圖像

關(guān)于 OpenCV 如何解釋圖像的第一個有趣的點是,imread()返回一個n 維數(shù)組對象。對于 RGB 圖像,例如本例中使用的圖像,此數(shù)組具有以下形狀:

[寬×高×通道數(shù)]

你可以通過打印圖像形狀來確認(rèn)這一點。

print("Original image shape:", image.shape)

更改圖像色彩空間

顏色空間是用于描述圖像的光譜上的一系列顏色。盡管有多種顏色空間可用,但最常見的是 RGB 和灰度。OpenCV 包含一種特殊的顏色空間轉(zhuǎn)換方法。為了將圖像從 RGB 轉(zhuǎn)換為灰度,你需要應(yīng)用 cvtColor()方法。

image_grayscale = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

cv2.imshow(“Grayscale image”, image_grayscale)

灰度圖像

重要的是要注意,現(xiàn)在你的圖像不再包含三個維度。那是因為對應(yīng)于通道的第三維在灰度色彩空間中沒有使用。

print("Grayscale image shape:", image_grayscale.shape)

編輯圖像通道

返回到包含三個顏色通道的原始圖像,你現(xiàn)在可以操縱每個通道的強(qiáng)度值,以抑制或突出顯示特定通道。與通常假設(shè)的相反,RGB 通道的訪問順序與首字母縮寫詞中的順序不同。在 OpenCV 中,通道實際上以 BGR 格式提供:

0 = B(藍(lán)色)

1 = G(綠色)

2 = R(紅色)

在下面的示例中,我檢索前兩個通道中的所有像素并將它們設(shè)為零,這樣綠色和藍(lán)色通道將不會對生成的圖像產(chǎn)生任何影響,因此圖像將呈現(xiàn)完全紅色調(diào)。

image_red = image.copy()

image_red[:, :, :2] = 0 

cv2.imshow("Red image", image_red)

具有空藍(lán)色和綠色通道的圖像

打印紅色圖像形狀時,請注意仍然存在第三維,否則生成的圖像將被描述為灰度

print("Red image shape:", image_red.shape)

旋轉(zhuǎn)圖像

除了顏色之外,還可以對圖像形狀進(jìn)行操作,例如大小和方向。你可以從獲取圖像尺寸開始,就像 NumPy 對象一樣。

width, height, _ = image.shape

然后可以通過取其寬度和高度的一半來計算圖像的中心點。

center = (width//2, height//2)

為了旋轉(zhuǎn)圖像,你首先必須創(chuàng)建一個旋轉(zhuǎn)矩陣,分別將中心點、所需的旋轉(zhuǎn)度數(shù)和圖像比例作為參數(shù)傳遞。使用不同于 1 的比例會改變圖像大小。

rotation_matrix = cv2.getRotationMatrix2D(center, 45, 1.0) 

旋轉(zhuǎn)矩陣對象本身不足以做我們想要的。它作為參數(shù)傳遞給 warpAffine() 方法,這是實際執(zhí)行旋轉(zhuǎn)的方法。

image_rotated = cv2.warpAffine(image, rotation_matrix, (width, height))

cv2.imshow(“Rotated image”, image_rotated)

旋轉(zhuǎn)圖像

調(diào)整圖像大小

你可以使用之前獲得的高度和寬度值來定義圖像的新尺寸。在下面的示例中,我將它們設(shè)置為將圖像縮小到其原始大小的三分之一。

new_size = (width//3, height//3)

負(fù)責(zé)調(diào)整圖像大小的方法是resize(),它分別需要原始圖像對象、所需的新大小和插值方法作為參數(shù)。

image_resized = cv2.resize(image, new_size, interpolation=cv2.INTER_LINEAR)

cv2.imshow(“Resized image”, image_resized)

調(diào)整大小的圖像

然后,你可以檢查調(diào)整大小的圖像的尺寸。

print(“Resized image shape:”, image_resized.shape)

將繪圖插入圖像

在某些應(yīng)用程序中,可能需要向圖像添加標(biāo)記。OpenCV 類提供了多種在其上繪制線條和形狀的方法。如下添加一行。這里的參數(shù)是原始圖像、初始位置、最終位置、線條顏色 RGB 代碼和線條寬度。

請注意,實際上使用的是原始圖像的副本,因為繪圖方法會影響原始圖像。

image_line = cv2.line(image.copy(), (0, 0), (height//2, width//2), (0, 255, 255), 10)

cv2.imshow(“Image with line”, image_line)

帶線條的圖像

同樣,在圖像中繪制矩形也有特定的方法。在這種情況下,第二個和第三個參數(shù)是矩形相對頂點的位置(左上角和右下角)。

image_rectangle = cv2.rectangle(image.copy(), (500, 150), (900, 550), (0, 255, 255), 5)

cv2.imshow(“Image with rectangle”, image_rectangle)

帶有矩形的圖像

你還可以通過將圓的中心位置和半徑分別指定為第二個和第三個參數(shù)來繪制一個圓。

image_circle = cv2.circle(image.copy(), (300, 300), 200, (0, 255, 255), 5)

cv2.imshow(“Image with circle”, image_circle)

帶圓的圖像

       原文標(biāo)題 : Python中OpenCV的基礎(chǔ)知識

聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權(quán)或其他問題,請聯(lián)系舉報。

發(fā)表評論

0條評論,0人參與

請輸入評論內(nèi)容...

請輸入評論/評論長度6~500個字

您提交的評論過于頻繁,請輸入驗證碼繼續(xù)

暫無評論

暫無評論

人工智能 獵頭職位 更多
掃碼關(guān)注公眾號
OFweek人工智能網(wǎng)
獲取更多精彩內(nèi)容
文章糾錯
x
*文字標(biāo)題:
*糾錯內(nèi)容:
聯(lián)系郵箱:
*驗 證 碼:

粵公網(wǎng)安備 44030502002758號