Python中OpenCV的基礎(chǔ)知識(shí)
從安裝到基本圖像處理
OpenCV 是一個(gè)流行的開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù),可用于不同的編程語(yǔ)言,例如 Python、C++ 和 JavaScript。它提供了一套豐富的工具來(lái)處理和分析圖像和視頻,讓你可以從調(diào)整單張圖片的大小到構(gòu)建復(fù)雜的對(duì)象識(shí)別應(yīng)用程序。
Python 編程語(yǔ)言除了被廣泛用作大多數(shù)圖像處理和計(jì)算機(jī)視覺(jué)應(yīng)用程序的標(biāo)準(zhǔn)外,還允許以非常直接的方式將 OpenCV 安裝在你的計(jì)算機(jī)中。
在本教程中,我將向你展示使用 OpenCV 安裝、設(shè)置和對(duì)圖像執(zhí)行一些基本操作所需的步驟,重點(diǎn)介紹有關(guān)該庫(kù)背后概念的重要基礎(chǔ)知識(shí)。
值得一提的是,這些步驟是在基于 Linux 的操作系統(tǒng)中使用Python3執(zhí)行的。因此,如果你使用不同的配置,則可能需要進(jìn)行細(xì)微的更改。
設(shè)置虛擬環(huán)境
使用 Python 時(shí),通常建議在虛擬環(huán)境中運(yùn)行你的應(yīng)用程序。這樣做,你可以只安裝運(yùn)行應(yīng)用程序所需的包,使其獨(dú)立于系統(tǒng)的其余部分。如果你的計(jì)算機(jī)上仍然沒(méi)有安裝虛擬環(huán)境工具,我建議你安裝以下工具。
python3 -m pip install virtualenv
安裝后,你可以使用此工具創(chuàng)建新的虛擬環(huán)境。為此,導(dǎo)航到你想要的目錄并運(yùn)行以下命令。請(qǐng)注意,我為我的環(huán)境選擇了名稱(chēng) my_venv,但你可以選擇任何你想要的名稱(chēng)。
python3 -m venv my_venv
最后,你只需要激活你的虛擬環(huán)境,以便你在此終端中運(yù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
打開(kāi)圖像
使用你最喜歡的 IDE,創(chuàng)建一個(gè)擴(kuò)展名為 .py 的新文件,然后從導(dǎo)入 OpenCV 類(lèi)開(kāi)始
import cv2
我們?cè)谶@里做的第一件事是使用 imread() 方法加載圖像并使用 imshow() 方法打開(kāi)它。請(qǐng)將下面的路徑替換為你的圖片所在的路徑。
image = cv2.imread("images/messi.jpg")
cv2.imshow("Original image", image)
原始圖像
關(guān)于 OpenCV 如何解釋圖像的第一個(gè)有趣的點(diǎn)是,imread()返回一個(gè)n 維數(shù)組對(duì)象。對(duì)于 RGB 圖像,例如本例中使用的圖像,此數(shù)組具有以下形狀:
[寬×高×通道數(shù)]
你可以通過(guò)打印圖像形狀來(lái)確認(rèn)這一點(diǎn)。
print("Original image shape:", image.shape)
更改圖像色彩空間
顏色空間是用于描述圖像的光譜上的一系列顏色。盡管有多種顏色空間可用,但最常見(jiàn)的是 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)在你的圖像不再包含三個(gè)維度。那是因?yàn)閷?duì)應(yīng)于通道的第三維在灰度色彩空間中沒(méi)有使用。
print("Grayscale image shape:", image_grayscale.shape)
編輯圖像通道
返回到包含三個(gè)顏色通道的原始圖像,你現(xiàn)在可以操縱每個(gè)通道的強(qiáng)度值,以抑制或突出顯示特定通道。與通常假設(shè)的相反,RGB 通道的訪(fǎng)問(wèn)順序與首字母縮寫(xiě)詞中的順序不同。在 OpenCV 中,通道實(shí)際上以 BGR 格式提供:
0 = B(藍(lán)色)
1 = G(綠色)
2 = R(紅色)
在下面的示例中,我檢索前兩個(gè)通道中的所有像素并將它們?cè)O(shè)為零,這樣綠色和藍(lán)色通道將不會(huì)對(duì)生成的圖像產(chǎn)生任何影響,因此圖像將呈現(xiàn)完全紅色調(diào)。
image_red = image.copy()
image_red[:, :, :2] = 0
cv2.imshow("Red image", image_red)
具有空藍(lán)色和綠色通道的圖像
打印紅色圖像形狀時(shí),請(qǐng)注意仍然存在第三維,否則生成的圖像將被描述為灰度
print("Red image shape:", image_red.shape)
旋轉(zhuǎn)圖像
除了顏色之外,還可以對(duì)圖像形狀進(jìn)行操作,例如大小和方向。你可以從獲取圖像尺寸開(kāi)始,就像 NumPy 對(duì)象一樣。
width, height, _ = image.shape
然后可以通過(guò)取其寬度和高度的一半來(lái)計(jì)算圖像的中心點(diǎn)。
center = (width//2, height//2)
為了旋轉(zhuǎn)圖像,你首先必須創(chuàng)建一個(gè)旋轉(zhuǎn)矩陣,分別將中心點(diǎn)、所需的旋轉(zhuǎn)度數(shù)和圖像比例作為參數(shù)傳遞。使用不同于 1 的比例會(huì)改變圖像大小。
rotation_matrix = cv2.getRotationMatrix2D(center, 45, 1.0)
旋轉(zhuǎn)矩陣對(duì)象本身不足以做我們想要的。它作為參數(shù)傳遞給 warpAffine() 方法,這是實(shí)際執(zhí)行旋轉(zhuǎn)的方法。
image_rotated = cv2.warpAffine(image, rotation_matrix, (width, height))
cv2.imshow(“Rotated image”, image_rotated)
旋轉(zhuǎn)圖像
調(diào)整圖像大小
你可以使用之前獲得的高度和寬度值來(lái)定義圖像的新尺寸。在下面的示例中,我將它們?cè)O(shè)置為將圖像縮小到其原始大小的三分之一。
new_size = (width//3, height//3)
負(fù)責(zé)調(diào)整圖像大小的方法是resize(),它分別需要原始圖像對(duì)象、所需的新大小和插值方法作為參數(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 類(lèi)提供了多種在其上繪制線(xiàn)條和形狀的方法。如下添加一行。這里的參數(shù)是原始圖像、初始位置、最終位置、線(xiàn)條顏色 RGB 代碼和線(xiàn)條寬度。
請(qǐng)注意,實(shí)際上使用的是原始圖像的副本,因?yàn)槔L圖方法會(huì)影響原始圖像。
image_line = cv2.line(image.copy(), (0, 0), (height//2, width//2), (0, 255, 255), 10)
cv2.imshow(“Image with line”, image_line)
帶線(xiàn)條的圖像
同樣,在圖像中繪制矩形也有特定的方法。在這種情況下,第二個(gè)和第三個(gè)參數(shù)是矩形相對(duì)頂點(diǎn)的位置(左上角和右下角)。
image_rectangle = cv2.rectangle(image.copy(), (500, 150), (900, 550), (0, 255, 255), 5)
cv2.imshow(“Image with rectangle”, image_rectangle)
帶有矩形的圖像
你還可以通過(guò)將圓的中心位置和半徑分別指定為第二個(gè)和第三個(gè)參數(shù)來(lái)繪制一個(gè)圓。
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ǔ)知識(shí)
發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
10月31日立即下載>> 【限時(shí)免費(fèi)下載】TE暖通空調(diào)系統(tǒng)高效可靠的組件解決方案
-
即日-11.13立即報(bào)名>>> 【在線(xiàn)會(huì)議】多物理場(chǎng)仿真助跑新能源汽車(chē)
-
11月28日立即報(bào)名>>> 2024工程師系列—工業(yè)電子技術(shù)在線(xiàn)會(huì)議
-
12月19日立即報(bào)名>> 【線(xiàn)下會(huì)議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
-
即日-12.26火熱報(bào)名中>> OFweek2024中國(guó)智造CIO在線(xiàn)峰會(huì)
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書(shū)》
推薦專(zhuān)題
- 1 【一周車(chē)話(huà)】沒(méi)有方向盤(pán)和踏板的車(chē),你敢坐嗎?
- 2 特斯拉發(fā)布無(wú)人駕駛車(chē),還未迎來(lái)“Chatgpt時(shí)刻”
- 3 特斯拉股價(jià)大跌15%:Robotaxi離落地還差一個(gè)蘿卜快跑
- 4 馬斯克給的“驚喜”夠嗎?
- 5 大模型“新星”開(kāi)啟變現(xiàn)競(jìng)速
- 6 海信給AI電視打樣,12大AI智能體全面升級(jí)大屏體驗(yàn)
- 7 打完“價(jià)格戰(zhàn)”,大模型還要比什么?
- 8 馬斯克致敬“國(guó)產(chǎn)蘿卜”?
- 9 神經(jīng)網(wǎng)絡(luò),誰(shuí)是盈利最強(qiáng)企業(yè)?
- 10 比蘋(píng)果偉大100倍!真正改寫(xiě)人類(lèi)歷史的智能產(chǎn)品降臨
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷(xiāo)售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷(xiāo)售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專(zhuān)家 廣東省/江門(mén)市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市