最小外接矩形

https://blog.csdn.net/weixin_37763340/article/details/114339621

(cx,cy), (l,w), theta=cv2.minAreaRect(points)

输入:点集
返回值:中心点坐标->(cx,cy);长宽->(l,w);从x轴逆时针旋转到宽(w)的角度->theta

cv2.boxPoints()可以将minAreaRect的返回值转换为四个角点坐标

sum函数

a.sum()是将矩阵中所有的元素进行求和

a.sum(axis = 0)是普通的相加,即对应列相加

a.sum(axis=1),矩阵中元素行相加

argmin()函数,给出数组中最小值的下标值。

np.roll()函数:

numpy.roll(ashiftaxis=None),a为输入数组,shift为滚动长度,axis为滚动维度,默认为None,即先将数组进行扁平化处理,然后再水平滚动;axis=0,数组垂直方向滚动;axis=1,数组水平方向滚动。

a.reshape(x,y,z):将数组变换为x行,y列,z维的数组,若x或y为-1,代表a数组的行或列数不变。

cv2.polylines()函数:

cv2.polylines()用来画多边形。

  • 第1个参数为图像对象;
  • 第2个参数为包含一个三元组元素的列表,包含了多边形的各个顶点;
  • 第3个参数为Bool型参数表示是否闭合;通常为ture
  • 第4个参数为颜色;
  • 第5个参数为线条宽度,注意不能使用-1表示填充;

实现代码:

import cv2

imgpath = '1.jpg'
image = cv2.imread(imgpath)
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
_, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)  
contours, _ = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
for cont in contours:
	# 对每个轮廓点求最小外接矩形
    rect = cv2.minAreaRect(cont)
    # cv2.boxPoints可以将轮廓点转换为四个角点坐标
    box = cv2.boxPoints(rect)
    # 这一步不影响后面的画图,但是可以保证四个角点坐标为顺时针
    startidx = box.sum(axis=1).argmin()
    box = np.roll(box,4-startidx,0)
    # 在原图上画出预测的外接矩形
    box = box.reshape((-1,1,2)).astype(np.int32)
    cv2.polylines(image,[box],True,(0,255,0),10)
cv2.imshow('ret',image)

cv2.waitKey(0)

输出结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值