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 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           480,375
∣ |
∨ \vee
y y y

当然我们也可以利用切片来选择我们感兴趣的区域(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 ↩︎ ↩︎

  • 14
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值