python opencv minAreaRect 生成最小外接矩形的方法

使用python opencv返回点集cnt的最小外接矩形,所用函数为 cv2.minAreaRect(cnt)
,cnt是点集数组或向量(里面存放的是点的坐标),并且这个点集不定个数。

举例说明:画一个任意四边形(任意多边形都可以)的最小外接矩形,那么点集 cnt 存放的就是该四边形的4个顶点坐标(点集里面有4个点)

cnt = np.array([[x1,y1],[x2,y2],[x3,y3],[x4,y4]]) # 必须是array数组的形式

rect = cv2.minAreaRect(cnt) # 得到最小外接矩形的(中心(x,y), (宽,高), 旋转角度)

box = cv2.cv.BoxPoints(rect) # cv2.boxPoints(rect) for OpenCV 3.x
获取最小外接矩形的4个顶点坐标

box = np.int0(box)

函数 cv2.minAreaRect()
返回一个Box2D结构rect:(最小外接矩形的中心(x,y),(宽度,高度),旋转角度),但是要绘制这个矩形,我们需要矩形的4个顶点坐标box, 通过函数
cv2.cv.BoxPoints() 获得,返回形式[ [x0,y0], [x1,y1], [x2,y2], [x3,y3]
]。得到的最小外接矩形的4个顶点顺序、中心坐标、宽度、高度、旋转角度(是度数形式,不是弧度数)的对应关系如下:

注意:

旋转角度θ是水平轴(x轴)逆时针旋转,与碰到的矩形的第一条边的夹角。并且这个边的边长是width,另一条边边长是height。也就是说,在这里,width与height不是按照长短来定义的。

在opencv中,坐标系原点在左上角,相对于x轴,逆时针旋转角度为负,顺时针旋转角度为正。所以,θ∈(-90度,0]。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2019-06-29

本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 一.基本原理 Mat img= imread(image): Rect
rect(50,20, 200, 50); Mat ROI = img(rect); imshow("ROI_WIN",ROI); -
其中:Rect的函数定义为: Rect(_Tp _x, _Tp _y, _Tp _width, _Tp _height); _Tp
_x:表示矩形左上角顶点的x坐标: _Tp _y:表示矩形左上角

Opencv中求点集的最小外结矩使用方法minAreaRect,求点集的最小外接圆使用方法minEnclosingCircle.
minAreaRect方法原型: RotatedRect minAreaRect( InputArray points );
输入参数points是所要求最小外结矩的点集数组或向量: minEnclosingCircle方法原型: void minEnclosingCircle(
InputArray points, CV_OUT Point2f& center, C

这段时间一直在用opencv搞图像处理的问题,发现虽然可调用的函数多,但是直接找相应代码还是很困难,就行寻找连通域,并在连通域外侧加框,对于习惯使用Mat矩形操作的我,真心感觉代码少之又少,为防止以后自己还会用到,特在此记录一下.
要对下面的图像进行字符的边缘检测. 程序中具体的步骤为: (1)灰度化.二值化 (2)图像膨胀 (3)检测膨胀图像的边缘并叫外矩形框 实现代码如下:
#include "stdafx.h" #include "stdio.h" #incl

前两篇博文分别介绍了图像的边缘检测和轮廓检测,本文接着介绍图像的轮廓检测和轮廓外接矩形: 一.代码部分: // extract_contours.cpp :
定义控制台应用程序的入口点. // #include "stdafx.h" #include #include using namespace cv;
using namespace std; int _tmain(int argc, _TCHAR* argv[]) { /

本文实例为大家分享了OpenCV鼠标绘制截取矩形区域图像的具体代码,供大家参考,具体内容如下 在opencv中利用鼠标绘制矩形,代码如下: #include
#include #include #pragma comment( lib, "cv.lib" ) #pragma comment( lib,
"cxcore.lib" ) #pragma comment( lib,

有时候需要对有角度的矩形框内图像从原图片中分割出来.这里的程序思想是,先将图片进行矩形角度的旋转,使有角度的矩形处于水平状态后,根据原来坐标分割图片.
参考:python opencv实现旋转矩形框裁减功能 修改原来的程序: 1.旋转函数的输入仅为矩形的四点坐标 2.角度由公式计算出来
3.矩形四点pt1,pt2,pt3,pt4由txt文件读入 4.在旋转程序中还处理了顺时针和逆时针及出现矩形框翻转的问题. 代码: # -*-
coding:utf-8 -*- import cv2 from m

本文实例为大家分享了Opencv实现最小外接矩形和圆的具体代码,供大家参考,具体内容如下
步骤:将一幅图像先转灰度,再canny边缘检测得到二值化边缘图像,再寻找轮廓,轮廓是由一系列点构成的,要想获得轮廓的最小外接矩形,首先需要得到轮廓的近似多边形,用道格拉斯-普克抽稀(DP)算法,道格拉斯-普克抽稀算法,是将曲线近似表示为一系列点,并减少点的数量的一种算法.
该算法实现抽稀的过程是: 1)对曲线的首末点虚连一条直线,求曲线上所有点与直线的距离,并找出最大距离值dmax,用dmax与事先给定的阈

本文实例为大家分享了OpenCV选择图像中矩形区域并保存的具体代码,供大家参考,具体内容如下 根据中的example4.1改写: // An example
program in which the // user can draw boxes on the screen. // //#include
//#include #include "opencv2/imgproc/imgproc

如下所示: def draw_circle(event,x,y,flags,param): global
ix,iy,drawing,mode,start_x,start_y if event == cv2.EVENT_LBUTTONDOWN: if
drawing == False: start_x, start_y = x,y ix,iy = x,y drawing = True elif
drawing == True: cv2.line(img,(ix,iy),(x,y),(0,255,

本文实例为大家分享了python opencv实现旋转矩形框裁减的具体代码,供大家参考,具体内容如下
经常遇见旋转矩形框的裁减问题,那么思路是,将矩形框旋转正然后再裁减 # -*- coding:gb2312 -*- import cv2 from math
import * import numpy as np import time def
rotateImage(img,degree,pt1,pt2,pt3,pt4): height,width=img.shape[:2] heightNe

先说明下,我这是对某个目录下的图片名称进行操作,该目录下的图片名称为1.jpg,2.jpg.....这样类似的图片名. 1.旋转 #
-*-coding:utf-8-*- from PIL import Image def rotateimg(inputimg,outimg): im =
Image.open(inputimg) # 图片的宽度和高度 img_size = im.size
print("图片宽度和高度分别是{}".format(img_size)) # 旋转图片 # 左

假设我们有一幅图像,图像中的文本被旋转了一个未知的角度.为了对文字进行角度的校正,我们需要完成如下几个步骤: 1.检测出图中的文本范围
2.计算出文本被旋转的角度 3.将图像旋转特定的角度 第一步.读取图像,并做二值化处理 #读取图像,做二值化处理 img =
cv.imread('img/imageTextR.png') gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
cv.imshow('gray', gray) #像素取反,变成白字黑底 # gray

0x01 OpenCV安装 通过命令pip install opencv-python 安装 pip install opencv-python 0x02 
示例 import cv2 cap = cv2.VideoCapture(0) #打开摄像头 while(1): # get a frame ret,
frame = cap.read() # show a frame cv2.imshow("capture", frame) #生成摄像头窗口 if
cv2.waitKey(1)

如下所示: def mat_inter(box1,box2): # 判断两个矩形是否相交 # box=(xA,yA,xB,yB) x01, y01,
x02, y02 = box1 x11, y11, x12, y12 = box2 lx = abs((x01 + x02) / 2 - (x11 +
x12) / 2) ly = abs((y01 + y02) / 2 - (y11 + y12) / 2) sax = abs(x01 - x02) sbx
= abs(x11 - x12) say

我就废话不多说了,直接上代码吧! import cv2 from math import fabs, sin, cos, radians import
numpy as np from scipy.stats import mode def get_img_rot_broa(img, degree=45,
filled_color=-1): """ Desciption: Get img rotated a certain degree, and use
some color

本文实例为大家分享了python openCV获取人脸部分并存储的具体代码,供大家参考,具体内容如下 #-*- coding:utf-8 -*-
import cv2 import os import time import base64 import numpy as np save_path =
'E:\\opencv\\2018-04-24OpenCv\\RAR\\savetest' faceCascade =
cv2.CascadeClassifier( './haarcascade_f

本文实例讲述了Python基于OpenCV库Adaboost实现人脸识别功能.分享给大家供大家参考,具体如下:
以前用Matlab写神经网络的面部眼镜识别算法,研究算法逻辑,采集大量训练数据,迭代,计算各感知器的系数...相当之麻烦~而现在运用调用pythonOpenCV库Adaboost算法,无需知道算法逻辑,无需进行模型训练,人脸识别变得相当之简单了.
需要用到的库是opencv(open source computer vision),下载安装方式如下: 使用pip install num

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:766591547
关注微信