小强学Python+OpenCV之-1.4.2裁剪

小强学Python+OpenCV之-1.4.2裁剪

问题引入:如果一幅图像中,你只对其中的一部分感兴趣(ROI(region of interest))。那么,如何将这部分ROI提取出来,丢掉其它部分呢?利用裁剪。

目标

本节看似是要完成对图像的裁剪,但我们裁剪图像用到的方法是,numpy的切片功能。所以本节的目标实际是要熟练掌握numpy的数组切片功能。
mouth

实例

# 导入库
import cv2
import argparse

# 构造参数解析器
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="Path to the image")
args = vars(ap.parse_args())

# 加载图像并显示
image = cv2.imread(args["image"])
cv2.imshow("Original", image)

# 第一次尝试把嘴的部位裁剪出来
mouth = image[85:250, 85:220]
cv2.imshow("Mouth1", mouth)
cv2.waitKey(0)

# 第二次尝试把嘴的部位裁剪出来
mouth = image[85:350, 285:420]
cv2.imshow("Mouth2", mouth)
cv2.waitKey(0)

# 第三次尝试把嘴的部位裁剪出来
mouth = image[85:250, 85:220]
cv2.imshow("Mouth3", mouth)
cv2.waitKey(0)

第一次裁剪结果:
mouth1

第二次裁剪结果:
mouth2

第三次裁剪结果:
mouth3

我们经过了三次尝试之后,终于把我们想要的区域裁剪出来。
这种笨方法实在是不能忍受,后面,我们会想办法把我们想要的区域自动裁剪出来。这是我们的目标。

但当下,我们先来了解一下ROI是怎么裁剪出来的。
看关键语句:

mouth = image[85:250, 85:220]

看上去,numpy的数组切片只需要提供高度区间和宽度区间即可。事实上也确实是这样。
上面的语句表示提取矩形区域(左上角坐标(85,85),右下角坐标(220,250))的图像。

总结

OK。就是这么简单,唯一需要注意的是,numpy表示的图像,高度(y坐标)在前,宽度(x坐标)在后。

关于切片操作,推荐博客:廖雪峰-Python教程-切片

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值