美文网首页OpenCV@IT·互联网程序员
小强学Python+OpenCV之-1.4.2裁剪

小强学Python+OpenCV之-1.4.2裁剪

作者: Eric_AIPO | 来源:发表于2017-05-22 21:37 被阅读972次

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

目标

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

mouth.png

实例

# 导入库
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.png

第二次裁剪结果:

mouth2.png

第三次裁剪结果:

mouth3.png

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

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

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

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

总结

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

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

相关文章

网友评论

  • showaichuan:你好,你在文中提到用切片的方法裁剪出想要的区域很麻烦,并提到有一种自动裁剪的方法,想问一下这种自动裁剪法如何实现的。谢谢!
  • 807ed6422e6f:老哥
    加油!!!
    Eric_AIPO: @o_1bcb 你还玩简书啊?还是刚注册的?

本文标题:小强学Python+OpenCV之-1.4.2裁剪

本文链接:https://www.haomeiwen.com/subject/nnuixxtx.html