opencv-python中 boundingRect(cnt)以及cv2.rectangle用法「建议收藏」

转自http://blog.csdn.net/zhangxb35/article/details/47275277矩形边框(BoundingRectangle)是说,用一个最小的矩形,把找到的形状包起来。还有一个带旋转的矩形,面积会更小,效果见下图上代码首先介绍下cv2.boundingRect(img)这个函数这个函数很简单,img是一个二值图,也就是它的参数;

大家好,又见面了,我是你们的朋友全栈君。

转自  http://blog.csdn.net/zhangxb35/article/details/47275277

矩形边框(Bounding Rectangle)是说,用一个最小的矩形,把找到的形状包起来。还有一个带旋转的矩形,面积会更小,效果见下图

Bounding Rectangle

上代码

首先介绍下cv2.boundingRect(cnt)这个函数

这个函数很简单,cnt是一个轮廓点集合,也就是它的参数,可以通过cv2.findContours获取;

返回四个值,分别是x,y,w,h;

x,y是矩阵左上点的坐标,w,h是矩阵的宽和高

bgr_img = cv2.imread("./demo.jpeg")
gray_img = cv2.cvtColor(bgr_img, cv2.COLOR_BGR2GRAY)
th, binary = cv2.threshold(gray_img, 0, 255, cv2.THRESH_OTSU)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(bgr_img, contours, -1, (0, 0, 255), 3)

bounding_boxes = [cv2.boundingRect(cnt) for cnt in contours]

for bbox in bounding_boxes:
     [x , y, w, h] = bbox
     cv2.rectangle(bgr_img, (x, y), (x + w, y + h), (0, 255, 0), 2)

cv2.imshow("name", bgr_img)
cv2.waitKey(0)

然后利用cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)画出矩行

参数解释

第一个参数:img是原图

第二个参数:(x,y)是矩阵的左上点坐标

第三个参数:(x+w,y+h)是矩阵的右下点坐标

第四个参数:(0,255,0)是画线对应的rgb颜色

第五个参数:2是所画的线的宽度

# 用绿色(0, 255, 0)来画出最小的矩形框架
x, y, w, h = cv2.boundingRect(cnt)
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)

# 用红色表示有旋转角度的矩形框架
rect = cv2.minAreaRect(cnt)
box = cv2.cv.BoxPoints(rect)
box = np.int0(box)
cv2.drawContours(img, [box], 0, (0, 0, 255), 2)
cv2.imwrite('contours.png', img)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129531.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PHP json_encode float

    PHP json_encode floatPHPjson_encodefloat乐杨俊

    2022年7月14日
    19
  • httprunner3源码解读(2)models.py「建议收藏」

    httprunner3源码解读(2)models.py「建议收藏」源码目录结构我们首先来看下models.py的代码结构我们可以看到这个模块中定义了12个属性和22个模型类,我们依次来看属性源码分析importosfromenumimportEnu

    2022年7月29日
    21
  • 学计算机的男生喜欢什么样的女生,it男喜欢什么样的女孩

    学计算机的男生喜欢什么样的女生,it男喜欢什么样的女孩喜欢什么样的女孩子每个男生的定义都不一样,有些男生更喜欢性感魅惑的御姐范儿气质,当然,也有很多男生偏向甜美可爱风格的。那么it男喜欢什么样的女孩子呢?来源:图虫作者:79054344888189459虽然很多花心的男生喜欢的女孩子的类型是不固定的,而且一般都是见一个爱一个的,但实际上很多男生的心里对于自己喜欢的女孩子的类型是很清楚的,所以就算有女生喜欢他们,他们也不反感,但是接受却是一件困难的事情…

    2022年7月25日
    22
  • Flowable 6.7.0版本新功能特性

    Flowable 6.7.0版本新功能特性Flowable6.7.0版本主要增强的是BPM异步功能:1、实现了全局锁定机制,以更好地支持在具有多个Flowable引擎的设置中使用异步执行器2、添加了对多实例变量聚合的支持3、当多实例是一个自动步骤或一系列自动步骤时,为异步多实例使用添加了一个优化标志。如果设置,引擎将大大降低资源消耗,并删除乐观锁定异常,通常会提高性能4、从Task监听器抛出的异常不再包含在FlowableException中5、在此版本中,已升级到SpringBoot2.5.4和Spri

    2022年5月22日
    37
  • Spring AOP 实现原理

    Spring AOP 实现原理什么是AOPAOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-OrientedPrograming,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从

    2022年7月12日
    15
  • 基于单片机的交通信号灯控制系统设计论文_交通信号灯控制设计

    基于单片机的交通信号灯控制系统设计论文_交通信号灯控制设计本系统采用STC89C51单片机以及单片机最小系统和74HC245驱动电路以及外围的按键和数码管显示等部件,设计一个基于单片机的交通灯设计。设计通过两位一体共阴极数码管显…

    2022年9月24日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号