python opencv 剪切圖片

因爲在 OpenCV2 裏面,所有的東西都是 numpy array 即 np.ndarray1,所以使用 opencv 剪切圖像主要原理是用 ndarray 的切片。一張圖片基本上都是三維數組:行,列,通道數,切片只是涉及到前兩維。

img

選用這張圖的原因是該圖十分的規整。每一片的大小都是 240×375 的,這爲我們探究 ndarray 切片方式提供了便利。話不多說,代碼如下:

import numpy as np
import cv2

img = cv2.imread(r"C:\Users\Administrator\Desktop\players.png")
cv2.imshow("sss", img[0:375, 240:480])

最後剪切出來的圖如下。
在這裏插入圖片描述

我們根據這張圖分析一下 img[0:375, 240:480] 的含義1

  • 0:375 指的從豎直方向截取 0~375
  • 240:480 指的是從水平方向截取 240~480
  • 其中原點是圖片的左上角

240,0>x|-- 240,0 ------------>x
                                           |\space \space \space \space\space \space \space \space\space \space |\space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space |
                                           |\space \space \space \space\space \space\space \space\space \space |\space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space |
                                           |\space \space\space \space\space \space \space \space\space \space |\space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space |
          480,375|\space \space\space \space\space \space\space \space\space \space | --------480,375
|
\vee
yy

當然我們也可以利用切片來選擇我們感興趣的區域(ROI,Region of Interest)

PS. 一開始我覺得比較令人費解的是這裏 x y 是反的,但是其實這是對二維 ndarray 索引的概念沒有搞清楚。二維 ndarray 索引其實和 C++/Java 裏面二維數組索引是一樣的,都是先找到行,再找到列。這樣理解就不會感覺怪了。說的更具體一點其實是現找到第一個 axis 然後再找到第二個 axisaxis 的概念可以參考 The Basics 的前三段。y 代表的是第一個軸,x 代表的是第二個軸,都是先找第一個軸再找第二個軸。

在這裏插入圖片描述
樣例來自:https://www.cs.cmu.edu/~mrmiller/15-110/Handouts/arrays2D.pdf


  1. https://stackoverflow.com/questions/15589517/how-to-crop-an-image-in-opencv-using-python ↩︎ ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章