当前位置: 首页 > 编程笔记 >

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

景修杰
2023-03-14
本文向大家介绍Python通过OpenCV的findContours获取轮廓并切割实例,包括了Python通过OpenCV的findContours获取轮廓并切割实例的使用技巧和注意事项,需要的朋友参考一下

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+opencv轮廓检测代码解析

OpenCV-Python实现轮廓检测实例分析

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

 类似资料:
  • 我试图找到使用opencv findcontour的轮廓,但一些轮廓丢失了一个相当简单的图像。图像是在create_mat()函数中创建的,在rbt中使用findcontour。我曾尝试改变模式findcontour使用:CV_RETR_EXTERNAL,CV_RETR_LIST...我都试过了,改变方法:CV_CHAIN_APPROX_NONE...... opencv版本是3.3 我也尝试过先

  • 我正在开发一个程序,提取拼图上的贴纸,然后再找到它们的RGB。目前,我正处于要删除任何非“方形”轮廓的位置。我想知道我怎么能做到这一点。 我所做的就是加载图像,使其变灰,模糊,精明的边缘检测,放大它,找到轮廓并绘制它们。 有没有一种方法可以让我在轮廓周围画出而不是填充它们?并删除周围大小不大致相同或几乎有90度角的轮廓? 这是初始图像: 以下是绘制轮廓的图像:

  • 我工作在python在openCV 3.0.为了找到最大的白色像素区域,首先将阈值灰度图像转换为二值图像。 但它显示错误如下。 cv2。错误:/opencv/modules/imgproc/src/等高线。cpp:198:错误:(-210)[Start]FindContours在模式下仅支持CV_8UC1图像!=CV_RETR_FLOODFILL仅在函数cvStartFindContours中支持

  • 目标 了解轮廓是什么。 学习查找轮廓,绘制轮廓等。 你将看到以下功能:cv.findContours(),cv.drawContours() 什么是轮廓? 轮廓可以简单地解释为连接具有相同颜色或强度的所有连续点(沿边界)的曲线。轮廓是用于形状分析以及对象检测和识别的有用工具。 为了获得更高的准确性,请使用二进制图像。因此,在找到轮廓之前,请应用阈值或canny边缘检测。 从OpenCV 3.2开始

  • 本文向大家介绍python-opencv在有噪音的情况下提取图像的轮廓实例,包括了python-opencv在有噪音的情况下提取图像的轮廓实例的使用技巧和注意事项,需要的朋友参考一下 对于一般的图像提取轮廓,介绍了一个很好的方法,但是对于有噪声的图像,并不能很好地捕获到目标物体。 比如对于我的鼠标,提取的轮廓效果并不好,因为噪声很多: 所以本文增加了去掉噪声的部分。 首先加载原始图像,并显示图像

  • 我想,我很理解函数“cv2.FindOntours(图像、模式、方法)。但我在opencv的一个文档中得到了这个东西轮廓,层次=cv2.FindOntours(thresh,2,1)。我不明白这里2,1的含义以及为什么使用它们。请有人解释一下。

  • 我有一个边缘被坎尼探测到。我想提取边缘的轮廓。 我已经检查了下面的帖子。OpenCV转换Canny边缘到轮廓。 但是它没有处理复杂的形状。例如,带矩形的圆或带线的圆。 cv::findContours()函数有两个问题。1.返回非闭合边的闭合轮廓,但我需要非闭合轮廓2。为闭合边返回2个闭合轮廓(可能其中一个轮廓用于边,另一个用于边的内侧,但我想要两个轮廓中的一个。 有没有办法解决这个问题?谢谢。

  • 我有一组三角形的三个点。例如:[[39037],[371179],[555179]] 绘制直线后,如何在OpenCV中的点之间绘制直线? 如何在我刚才画的线条之间找到完整的轮廓? 我一直收到以下错误: 错误:(-210:不支持的格式或格式组合)[Start]FindContours在模式下仅支持CV_8UC1图像!=CV_RETR_FLOODFILL仅在函数“cvStartFindContours