Python通过OpenCV的findContours获取轮廓并切割实例


Posted in Python onJanuary 05, 2018

1 获取轮廓

OpenCV2获取轮廓主要是用cv2.findContours

import numpy as np
import cv2

im = cv2.imread('test.jpg')
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,127,255,0)
image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

其中,findContours的第二个函数很重要,主要分为 cv2.RETR_LIST, cv2.RETR_TREE, cv2.RETR_CCOMP, cv2.RETR_EXTERNAL,具体含义可参考官方文档

2 画出轮廓

为了看到自己画了哪些轮廓,可以使用 cv2.boundingRect()函数获取轮廓的范围,即左上角原点,以及他的高和宽。然后用cv2.rectangle()方法画出矩形轮廓

for i in range(0,len(contours)): 
  x, y, w, h = cv2.boundingRect(contours[i])  
  cv2.rectangle(image, (x,y), (x+w,y+h), (153,153,0), 5)

3切割轮廓

轮廓的切割主要是通过数组切片实现的,不过这里有一个小技巧:就是图片切割的w,h是宽和高,而数组讲的是行(row)和列(column)

所以,在切割图片时,数组的高和宽是反过来写的

newimage=image[y+2:y+h-2,x+2:x+w-2] # 先用y确定高,再用x确定宽
      nrootdir=("E:/cut_image/")
      if not os.path.isdir(nrootdir):
        os.makedirs(nrootdir)
      cv2.imwrite( nrootdir+str(i)+".jpg",newimage) 
      print (i)

这样就可以把确定的轮廓都切割出来了。

总结

以上就是本文关于Python通过OpenCV的findContours获取轮廓并切割实例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
Python如何快速上手? 快速掌握一门新语言的方法
Nov 14 Python
Python/ArcPy遍历指定目录中的MDB文件方法
Oct 27 Python
解决Shell执行python文件,传参空格引起的问题
Oct 30 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
Feb 21 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
Feb 26 Python
python各层级目录下import方法代码实例
Jan 20 Python
pytorch实现保证每次运行使用的随机数都相同
Feb 20 Python
python的Jenkins接口调用方式
May 12 Python
python中watchdog文件监控与检测上传功能
Oct 30 Python
python 数据类型强制转换的总结
Jan 25 Python
手把手教你配置JupyterLab 环境的实现
Feb 02 Python
Python列表的索引与切片
Apr 07 Python
Python+selenium实现截图图片并保存截取的图片
Jan 05 #Python
微信跳一跳辅助python代码实现
Jan 05 #Python
使用python为mysql实现restful接口
Jan 05 #Python
微信跳一跳python代码实现
Jan 05 #Python
python+opencv轮廓检测代码解析
Jan 05 #Python
python selenium UI自动化解决验证码的4种方法
Jan 05 #Python
轻松实现TensorFlow微信跳一跳的AI
Jan 05 #Python
You might like
php实现文本数据导入SQL SERVER
2015/05/17 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
2015/07/29 PHP
常见PHP数据库解决方案分析介绍
2015/09/24 PHP
js 解决“options为空或不是对象”
2008/12/22 Javascript
JavaScript随机排序(随即出牌)
2010/09/17 Javascript
根据一段代码浅谈Javascript闭包
2010/12/14 Javascript
Node.js中创建和管理外部进程详解
2014/08/16 Javascript
后台获取ZTREE选中节点的方法
2015/02/12 Javascript
Javascript中的call()方法介绍
2015/03/15 Javascript
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
javascript闭包(Closure)用法实例简析
2015/11/30 Javascript
浅谈JS中json数据的处理
2016/06/30 Javascript
用jQuery向div中添加Html文本内容的简单实现
2016/07/13 Javascript
jQuery实用小技巧_输入框文字获取和失去焦点的简单实例
2016/08/25 Javascript
javaScript之split与join的区别(详解)
2017/11/08 Javascript
浅谈Angular文字折叠展开组件的原理分析
2017/11/24 Javascript
小程序登录态管理的方法示例
2018/11/13 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
Vue实现购物车基本功能
2020/11/08 Javascript
python使用wmi模块获取windows下硬盘信息的方法
2015/05/15 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
python 异或加密字符串的实例
2018/10/14 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
django ListView的使用 ListView中获取url中的参数值方式
2020/03/27 Python
Python3之外部文件调用Django程序操作model等文件实现方式
2020/04/07 Python
使用python批量修改XML文件中图像的depth值
2020/07/22 Python
婚礼证婚人证婚词
2014/01/08 职场文书
毕业生自我鉴定实例
2014/01/21 职场文书
办公室务虚会发言材料
2014/10/20 职场文书
2015年教师节慰问信
2015/03/23 职场文书
诚信考试主题班会
2015/08/17 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python
Redis Cluster集群动态扩容的实现
2021/07/15 Redis
MYSQL如何查看操作日志详解
2022/05/30 MySQL