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 24 Python
python定时器使用示例分享
Feb 16 Python
设计模式中的原型模式在Python程序中的应用示例
Mar 02 Python
Python实现的递归神经网络简单示例
Aug 11 Python
10个Python小技巧你值得拥有
Sep 29 Python
python pytest进阶之conftest.py详解
Jun 27 Python
python redis连接 有序集合去重的代码
Aug 04 Python
解决django的template中如果无法引用MEDIA_URL问题
Apr 07 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
基于Python实现下载网易音乐代码实例
Aug 10 Python
python爬虫中PhantomJS加载页面的实例方法
Nov 12 Python
Python中time与datetime模块使用方法详解
Mar 31 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文件上传的简单实例
2013/10/19 PHP
PHP实现克鲁斯卡尔算法实例解析
2014/08/22 PHP
总结PHP中初始化空数组的最佳方法
2019/02/13 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
深入分析js中的constructor和prototype
2012/04/07 Javascript
JS中实现replaceAll的方法(实例代码)
2013/11/12 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
跟我学习javascript的异步脚本加载
2015/11/20 Javascript
JavaScript数据绑定实现一个简单的 MVVM 库
2016/04/08 Javascript
探究Vue.js 2.0新增的虚拟DOM
2016/10/20 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
Angular实现图片裁剪工具ngImgCrop实践
2017/08/17 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
JS随机排序数组实现方法分析
2017/10/11 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
vue项目中,main.js,App.vue,index.html的调用方法
2018/09/20 Javascript
Vue press 支持图片放大功能的实例代码
2018/11/09 Javascript
详解如何模拟实现node中的Events模块(通俗易懂版)
2019/04/15 Javascript
React组件对子组件children进行加强的方法
2019/06/23 Javascript
解决layer.open后laydate失效的问题
2019/09/06 Javascript
Python Web框架Flask中使用百度云存储BCS实例
2015/02/08 Python
python中zip和unzip数据的方法
2015/05/27 Python
Python正则简单实例分析
2017/03/21 Python
Python Web框架之Django框架cookie和session用法分析
2019/08/16 Python
Django Haystack 全文检索与关键词高亮的实现
2020/02/17 Python
python list的index()和find()的实现
2020/11/16 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
城市轨道专业个人求职信范文
2013/09/23 职场文书
中专生毕业自我鉴定
2013/11/01 职场文书
招商业务员岗位职责
2013/12/16 职场文书
新书发布会策划方案
2014/06/09 职场文书
2016年公司“3.12”植树节活动总结
2016/03/16 职场文书
创业计划书之冷饮店
2019/09/27 职场文书
HTML页面滚动时部分内容位置固定不滚动的实现
2021/04/14 HTML / CSS
oracle覆盖导入dmp文件的2种方法
2021/05/21 Oracle