8.openCV 裁剪图像
8.openCV 裁剪圖像
- 一、使用 OpenCV 裁剪圖像
- 二、項(xiàng)目結(jié)構(gòu)和代碼講解
- 1.項(xiàng)目結(jié)構(gòu)
- 2.代碼講解
- 三、代碼下載
一、使用 OpenCV 裁剪圖像
在本教程的第一部分,我們將討論如何將 OpenCV 圖像表示為 NumPy 數(shù)組。由于每個(gè)圖像都是一個(gè) NumPy 數(shù)組,我們可以利用 NumPy 數(shù)組切片來(lái)裁剪圖像。
使用 OpenCV 和 NumPy 數(shù)組切片理解圖像裁剪
當(dāng)我們裁剪圖像時(shí),我們想要移除我們不感興趣的圖像的外部部分。我們通常將此過(guò)程稱為選擇我們的興趣區(qū)域,或者更簡(jiǎn)單地說(shuō),我們的 ROI。
我們可以通過(guò)使用 NumPy 數(shù)組切片來(lái)完成圖像裁剪。
讓我們首先初始化一個(gè)NumPy列表,其值范圍為[ 0,24 ]:
現(xiàn)在讓我們將這個(gè) 1D 列表重塑為一個(gè) 2D 矩陣,假裝它是一個(gè)圖像:
現(xiàn)在,假設(shè)我要提取從x = 0,y = 0到x = 2,y = 3的“像素” 。這樣做可以使用以下代碼完成:
注意我們是如何提取三行 ( y = 3 ) 和兩列 ( x = 2
現(xiàn)在,讓我們提取從x = 1、y = 3開(kāi)始到x = 5和y = 5結(jié)束的像素
此結(jié)果提供圖像的最后兩行,減去第一列。
你注意到這里的一個(gè)模式了嗎?
將 NumPy 數(shù)組切片應(yīng)用于圖像時(shí),我們使用以下語(yǔ)法提取 ROI:
roi = image[ startY : endY , startX : endX ]
這startY : endY 提供我們numpy數(shù)組中的的行(因?yàn)閥軸是我們的行數(shù))而 startX : endX 提供圖像numpy數(shù)組中的列(因?yàn)閤軸是列數(shù))
看到這里如果不太明白,建議去看一篇numpy數(shù)組切片的博文: 點(diǎn)此鏈接.去理解數(shù)組切片!
二、項(xiàng)目結(jié)構(gòu)和代碼講解
通過(guò)博文末尾或此處的的代碼下載.
下載本博文對(duì)應(yīng)的代碼項(xiàng)目,以下是下載解壓后的
1.項(xiàng)目結(jié)構(gòu)
我們今天只有一個(gè) Python 腳本, opencv_crop.py,這將加載輸.png 圖像,然后使用 NumPy 數(shù)組切片從圖像中裁剪出面部和身體。
2.代碼講解
第 2 行和第 3 行導(dǎo)入我們需要的 Python 包,而第 6-9 行解析我們的命令行參數(shù)。
我們只需要一個(gè)命令行參數(shù), - 圖像,這是我們希望裁剪的輸入圖像的路徑。對(duì)于這個(gè)例子,我們將默認(rèn)- 圖像 .png 文件在我們的項(xiàng)目目錄中。
接下來(lái),讓我們從磁盤(pán)加載我們的圖像:
第 12 和 13 行圖像 然后將其顯示到我們的屏幕上:
我們的目標(biāo)是使用簡(jiǎn)單的裁剪方法從該區(qū)域中提取臉和身體。
我們通常會(huì)應(yīng)用物體檢測(cè)技術(shù)來(lái)檢測(cè)圖像中我的臉和身體。然而,由于我們?cè)?OpenCV 教育課程中還處于早期階段,我們將使用我們對(duì)圖像的先驗(yàn)知識(shí)并手動(dòng)提供身體和面部所在的 NumPy 數(shù)組切片。
同樣,我們當(dāng)然可以使用對(duì)象檢測(cè)方法從圖像中自動(dòng)檢測(cè)和提取人臉
我們用一行代碼(第 20 行)從圖像中提取我的臉。
我們提供 NumPy 數(shù)組切片來(lái)提取圖像的矩形區(qū)域,從(85, 85)開(kāi)始到(220, 250)結(jié)束。
我們?yōu)樽魑锾峁┧饕捻樞蚩赡芸雌饋?lái)違反直覺(jué);但是,請(qǐng)記住,OpenCV 將圖像表示為 NumPy 數(shù)組,高度在前(行數(shù)),寬度在后(列數(shù))。
為了執(zhí)行我們的裁剪,NumPy 需要四個(gè)索引:
- 起始y:起始y坐標(biāo)。在這種情況下,我們從y = 85開(kāi)始。
- End y : 結(jié)束y坐標(biāo)。我們將在y = 250處結(jié)束我們的作物。
- 起始x:切片的起始x坐標(biāo)。我們?cè)趚 = 85處開(kāi)始裁剪。
- End x:切片的結(jié)束x軸坐標(biāo)。我們的切片在x = 220處結(jié)束。
我們可以在下面看到裁剪臉的結(jié)果:
同樣,我們可以從圖像中裁剪身體
裁剪身體是通過(guò)從原始圖像的坐標(biāo)(0, 90)開(kāi)始裁剪到(290, 450)結(jié)束來(lái)完成的。
您可以在下面看到使用 OpenCV 進(jìn)行裁剪的輸出:
運(yùn)行代碼
三、代碼下載
代碼下載.
總結(jié)
以上是生活随笔為你收集整理的8.openCV 裁剪图像的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Skype for Business 中
- 下一篇: cs1.6服务器修改弹道,CS1.6 比