首页 > 编程语言 >【Python】【OpenCV】绘制外接矩形和外接圆

【Python】【OpenCV】绘制外接矩形和外接圆

时间:2023-12-05 21:46:50浏览次数:37  
标签:box 外接 img Python cv2 外接圆 OpenCV 矩形 255

 外接矩形、外接圆:

 1 import cv2
 2 import numpy
 3 
 4 img = cv2.imread('../img/img.png', -1)
 5 ret, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
 6 contours, hier = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
 7 
 8 for c in contours:
 9     # 寻找平行于 x轴、y轴 的外接矩形坐标 -> 左上角坐标、宽度、高度
10     rectangle = cv2.boundingRect(c)
11     x, y, w, h = rectangle
12     # 绘制外接矩形
13     cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
14 
15     # 寻找包含前景图的 可旋转 最小外接矩形 -> 中心点坐标、宽度、高度
16     rect = cv2.minAreaRect(c)
17     # 寻找旋转矩形的四个顶点 -> 左上角、右上角、右下角和左下角的顶点坐标
18     box = cv2.boxPoints(rect)
19     # 取整
20     box = numpy.int0(box)
21     # 绘制外接矩形,对box打包成列表是因为drawContours希望接收为tuple or list
22     # 或者说是一个iterable
23     cv2.drawContours(img, [box], 0, (0, 0, 255), 3)
24 
25     # 计算最小外接圆 -> 圆心坐标、半径
26     (x, y), radius = cv2.minEnclosingCircle(c)
27     # 取整
28     center = int(x), int(y)
29     radius = int(radius)
30     # 绘制圆形
31     img = cv2.circle(img, center, radius, (0, 255, 0), 2)
32 
33 
34 img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
35 img = cv2.drawContours(img, contours, -1, (0, 255, 0), 2)
36 cv2.imshow('', img)
37 cv2.waitKey()
38 cv2.destroyAllWindows()

 

1、cv2.boundingRect() Method 和 cv2.minAreaRect() Merhod:前者只寻找和 x、y轴 平行的矩形,后者则可以出现旋转角度。

2、cv2.drawContours() Method:第二个参数接收的是轮廓信息,但是这个轮廓信息需要以 tuple or list 类型(或者说是iterable)才可以传入。

 

标签:box,外接,img,Python,cv2,外接圆,OpenCV,矩形,255
From: https://www.cnblogs.com/vangoghpeng/p/17878334.html

相关文章

  • Python的函数传参
    一、参数的两大分类1、形式参数在'函数定义阶段'括号内依次写入的变量名就叫形式参数,简称"形参"defindex(a,b,c,d,e):pass #a,b就称之为是函数的形参补充:type在形参中的用法defmy_function(param:int):print(param*2)#参数类型限制为整数类型#进......
  • Python GIL 和 多处理器
    当谈到Python的多线程时,人们经常会提到全局解释器锁(GlobalInterpreterLock,GIL)。GIL是CPython解释器中的一个机制,它确保同一时间只有一个线程在解释Python字节码。这导致了Python的多线程执行在某种程度上是单线程化的,无法充分利用多个处理器。现在让我们深入探讨一下为什么Pytho......
  • Python装饰器
    一、核心思想在不改变被装饰对象内部代码和原有调用方式的基础之上在添加额外的功能二、装饰器的实现过程根据实际需要,一步一步满足需求,完成对装饰器的理解1、简易版本给index函数添加统计执行时间的功能importtimedefindex():time.sleep(3)print('fromind......
  • 聪明办法学Python Talk02 debug
    Talk02如何为Python程序debug摆正心态:机器肯定是对的,程序有bug是自己的原因调试理论:“软件”的两层含义:​ 1.人类需求在信息世界的投影​ 理解错需求->bug​ 2.计算过程的精确(数学)描述​ 实现错误->bug调试:bug的触发:需求->设计->代码->Fault(bug)->Error->Failure......
  • How to use Python Decorators_2
    类也可以用来构建装饰器;现在以一个类而不是一个函数的方式,来重新构建logit;fromfunctoolsimportwrapsclasslogit(object):def__init__(self,logfile='out.log'):self.logfile=logfiledef__call__(self,func):@wraps(func)de......
  • 软件测试/人工智能|Python算术运算符:入门指南
    前言在编写程序时,可以使用算术运算符来进行基本的数学计算。Python中的算术运算符包括加法、减法、乘法、除法、取模和幂运算。本文就给大家介绍一下Python算术运算符的使用。加法运算符+加法运算符用于将两个数值相加,例如,a+b表示将a和b相加的结果。如果a和b都是数字,则加法......
  • Python数字处理:掌握核心函数与技巧
    在数据分析、科学计算和自动化脚本中,数字处理是Python编程的一个核心部分。Python提供了一系列内建函数和标准库,使得数字处理变得既简单又强大。在本篇博客中,我们将深入探讨Python中的数字处理函数,并提供一些实用的技巧,以帮助你提高编程效率和精度。1.基本数学函数Python的内建函......
  • 软件测试/人工智能|Python Pip 常用命令大全
    前言我们在使用Python进行编程时,难免需要用到Python的各种包,我们在不同的项目中需要用到不同的库,甚至需要用到同一个库的不同版本等,这些库,都是需要我们通过Python的库管理工具——pip来实现的,而pip这个工具也是Python初学者必须要学习掌握的一个工具,本文就来给大家介绍一下pip的......
  • 软件测试/人工智能|Python运算符:初学者指南
    什么是运算符?运算符是用于进行各种运算操作的符号或关键词。在数学和计算机编程中,运算符被用来表示不同的运算操作,例如加法、减法、乘法、除法等。比如:1+2,其中,1和2为操作数,+为运算符。a=18,其中,a和18为操作数,=为运算符。print(),其中,print为操作数,()为运算符。Pyt......
  • 代码随想训练营第五十六天(Python)| 583. 两个字符串的删除操作、72. 编辑距离
    583.两个字符串的删除操作classSolution:defminDistance(self,word1:str,word2:str)->int:n,m=len(word1),len(word2)#dp数组代表使得word1以i-1结尾和word2以j-1结尾相同的最小步数dp=[[0]*(m+1)for_inrange(n+......