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