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使用正则表达式匹配字符串开头并打印示例
Jan 11 Python
python实现按长宽比缩放图片
Jun 07 Python
django使用haystack调用Elasticsearch实现索引搜索
Jul 24 Python
Python 线程池用法简单示例
Oct 02 Python
Python实现动态循环输出文字功能
May 07 Python
详细分析Python collections工具库
Jul 16 Python
解决阿里云邮件发送不能使用25端口问题
Aug 07 Python
解决Python安装cryptography报错问题
Sep 03 Python
Python爬取某平台短视频的方法
Feb 08 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
Mar 03 Python
python+pytest接口自动化之token关联登录的实现
Apr 06 Python
Python内置的数据类型及使用方法
Apr 13 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开发的一些注意点总结
2010/10/12 PHP
一个PHP分页类的代码
2011/05/18 PHP
PHP文件打开、关闭、写入的判断与执行代码
2011/05/24 PHP
PHP目录操作实例总结
2016/09/27 PHP
PHP实现读取文件夹及批量重命名文件操作示例
2019/04/15 PHP
几个javascript操作word的参考代码
2009/10/26 Javascript
jquery 可拖拽的窗体控件实现代码
2010/03/21 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
深入理解JavaScript 函数
2016/06/06 Javascript
详解Javascript ES6中的箭头函数(Arrow Functions)
2016/08/24 Javascript
Bootstrap导航条学习使用(二)
2017/02/08 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
vue学习教程之带你一步步详细解析vue-cli
2017/12/26 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
2018/09/13 Javascript
读懂CommonJS的模块加载
2019/04/19 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
vue实现淘宝购物车功能
2020/04/20 Javascript
微信小程序实现分页加载效果
2020/11/19 Javascript
Python利用pyHook实现监听用户鼠标与键盘事件
2014/08/21 Python
python制作花瓣网美女图片爬虫
2015/10/28 Python
Python json 错误xx is not JSON serializable解决办法
2017/03/15 Python
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
python根据list重命名文件夹里的所有文件实例
2018/10/25 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
windows10在visual studio2019下配置使用openCV4.3.0
2020/07/14 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
年终考核评语
2014/01/19 职场文书
《我为你骄傲》教学反思
2014/02/20 职场文书
四风问题对照检查材料思想汇报
2014/10/07 职场文书
2014年科研工作总结
2014/12/03 职场文书
2014年小学数学教师工作总结
2014/12/03 职场文书
篮球赛新闻稿
2015/07/17 职场文书