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 Mysql数据库操作 Perl操作Mysql数据库
Jan 12 Python
python模拟登录百度贴吧(百度贴吧登录)实例
Dec 18 Python
Django自定义过滤器定义与用法示例
Mar 22 Python
树莓派+摄像头实现对移动物体的检测
Jun 22 Python
python openvc 裁剪、剪切图片 提取图片的行和列
Sep 19 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
Feb 17 Python
为什么称python为胶水语言
Jun 16 Python
如何基于Python爬虫爬取美团酒店信息
Nov 03 Python
Python用access判断文件是否被占用的实例方法
Dec 17 Python
python实现ping命令小程序
Dec 28 Python
Django给表单添加honeypot验证增加安全性
May 06 Python
Python中npy和mat文件的保存与读取
Apr 24 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
星际争霸, 教主第一视角, ZvT经典龙蛇演义
2020/03/02 星际争霸
WordPress中注册菜单与调用菜单的方法详解
2015/12/18 PHP
关于php 高并发解决的一点思路
2017/04/16 PHP
PHP封装的完整分页类示例
2018/08/21 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
2019/12/04 PHP
用JavaScript和注册表脚本实现右键收藏Web页选中文本
2007/01/28 Javascript
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
不同Jquery版本引发的问题解决
2013/10/14 Javascript
jQuery 追加元素的方法如append、prepend、before
2014/01/16 Javascript
JS实现判断滚动条滚到页面底部并执行事件的方法
2014/12/18 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
Jquery幻灯片特效代码分享--打开页面随机选择切换方式(3)
2015/08/15 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
Jqgrid之强大的表格插件应用
2015/12/02 Javascript
Bootstrap滚动监听组件scrollspy.js使用方法详解
2017/07/20 Javascript
jQuery中复合选择器简单用法示例
2018/03/31 jQuery
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
2019/11/07 Javascript
js实现小星星游戏
2020/03/23 Javascript
JavaScript 实现拖拽效果组件功能(兼容移动端)
2020/11/11 Javascript
Django Sitemap 站点地图的实现方法
2019/04/29 Python
python使用 cx_Oracle 模块进行查询操作示例
2019/11/28 Python
Python装饰器用法与知识点小结
2020/03/09 Python
详解Python设计模式之策略模式
2020/06/15 Python
CSS3 旋转立方体问题详解
2020/01/09 HTML / CSS
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
Clarks西班牙官方在线商店:clarks鞋
2019/05/03 全球购物
企业厂长岗位职责
2013/12/17 职场文书
办公室前台的岗位职责
2013/12/20 职场文书
年度考核评语
2014/01/19 职场文书
大学生个人事迹材料
2014/01/21 职场文书
土地租赁协议书
2015/01/29 职场文书
JavaScript文档对象模型DOM
2021/11/20 Javascript
Vue.js中v-bind指令的用法介绍
2022/03/13 Vue.js