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开发的小球完全弹性碰撞游戏代码
Oct 15 Python
Python写的创建文件夹自定义函数mkdir()
Aug 25 Python
如何使用python爬取csdn博客访问量
Feb 14 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
Apr 27 Python
python3+PyQt5泛型委托详解
Apr 24 Python
python程序控制NAO机器人行走
Apr 29 Python
Python 通过打码平台实现验证码的实现
May 13 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
Aug 05 Python
python双端队列原理、实现与使用方法分析
Nov 27 Python
python3.7添加dlib模块的方法
Jul 01 Python
GitHub上值得推荐的8个python 项目
Oct 30 Python
Python可变集合和不可变集合的构造方法大全
Dec 06 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
BBS(php & mysql)完整版(五)
2006/10/09 PHP
Snoopy类使用小例子
2008/04/15 PHP
PHP查询MySQL大量数据的时候内存占用分析
2011/07/22 PHP
从零开始学YII2框架(二)通过 Composer 安装扩展插件
2014/08/20 PHP
一段实用的php验证码函数
2016/05/19 PHP
PHP 的Opcache加速的使用方法
2017/12/29 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
2019/08/05 PHP
ArrayList类(增强版)
2007/04/04 Javascript
ie和firefox不兼容的解决方法集合
2009/04/28 Javascript
9个JavaScript评级/投票插件
2010/01/18 Javascript
javascript 验证日期的函数
2010/03/18 Javascript
浅谈JavaScript之事件绑定
2013/07/08 Javascript
js实现幻灯片效果(基于jquery插件)
2013/11/05 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
跟我学习javascript的执行上下文
2015/11/18 Javascript
jquery实现简单文字提示效果
2015/12/02 Javascript
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
详解微信小程序开发用户授权登陆
2019/04/24 Javascript
JS原型与继承操作示例
2019/05/09 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
2020/05/21 Javascript
JS中循环遍历数组的四种方式总结
2021/01/23 Javascript
Python实现多并发访问网站功能示例
2017/06/19 Python
一百多行python代码实现抢票助手
2018/09/25 Python
Python闭包思想与用法浅析
2018/12/27 Python
python SQLAlchemy 中的Engine详解
2019/07/04 Python
python tornado修改log输出方式
2019/11/18 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
python实现手势识别的示例(入门)
2020/04/15 Python
解决使用Pandas 读取超过65536行的Excel文件问题
2020/11/10 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
公司员工检讨书
2014/02/08 职场文书
2014年机关作风建设工作总结
2014/10/23 职场文书
go语言map与string的相互转换的实现
2021/04/07 Golang
vue+iview实现手机号分段输入框
2022/03/25 Vue.js
游戏《我的世界》澄清Xbox版暂无计划加入光追
2022/04/03 其他游戏