精华内容
下载资源
问答
  • 最小外接矩形面积
    千次阅读
    2021-05-06 18:18:02

    所用函数:
    cv2.threshold() —— 阈值处理
    cv2.findContours() —— 轮廓检测
    cv2.boundingRect() —— 最大外接矩阵
    cv2.rectangle() —— 画出矩形
    cv2.minAreaRect —— 找到最小外接矩形(矩形具有一定的角度)
    cv2.boxPoints —— 外接矩形的坐标位置
    cv2.drawContours(image, [box], 0, (0, 0, 255), 3) —— 根据点画出矩形

    # -*- coding: utf-8 -*-
    
    
    import cv2
    import numpy as np
    
    image = cv2.imread('/home/rose/PycharmProjects/PSENet.pytorch/test/img/20190507193429910.png')
    # 图像转灰度图
    img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # 图像转二值图
    ret, thresh = cv2.threshold(img, 230, 255, cv2.THRESH_BINARY_INV)
    # 功能:cv2.findContours()函数来查找检测物体的轮廓。
    #参数:
    # 参数1:寻找轮廓的图像,接收的参数为二值图,即黑白的(不是灰度图),所以读取的图像要先转成灰度的,再转成二值图
    # 参数2: 轮廓的检索模式,有四种。
    #       cv2.RETR_EXTERNAL 表示只检测外轮廓;
    #       cv2.RETR_LIST 检测的轮廓不建立等级关系;
    #       cv2.RETR_CCOMP 建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。
    #       cv2.RETR_TREE 建立一个等级树结构的轮廓。
    #
    # 参数3: 轮廓的近似办法.
    #       cv2.CHAIN_APPROX_NONE 存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1
    #       cv2.CHAIN_APPROX_SIMPLE 压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息
    #       cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS 使用teh-Chinl chain 近似算法
    # 注:opencv2返回两个值:contours:hierarchy。opencv3会返回三个值,分别是img, countours, hierarchy
    #
    #返回值
    #cv2.findContours()函数返回两个值,一个是轮廓本身,还有一个是每条轮廓对应的属性。
    contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    
    for c in contours:
        # 找到边界坐标
        x, y, w, h = cv2.boundingRect(c)  # 计算点集最外面的矩形边界
        cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
    
        # 找面积最小的矩形
        rect = cv2.minAreaRect(c)
        # 得到最小矩形的坐标
        box = cv2.boxPoints(rect)
        # 标准化坐标到整数
        box = np.int0(box)
        # 画出边界
        cv2.drawContours(image, [box], 0, (0, 0, 255), 3)
        # 计算最小封闭圆的中心和半径
        (x, y), radius = cv2.minEnclosingCircle(c)
        # 换成整数integer
        center = (int(x), int(y))
        radius = int(radius)
        # 画圆
        cv2.circle(image, center, radius, (0, 255, 0), 2)
    
    cv2.drawContours(image, contours, -1, (255, 0, 0), 1)
    cv2.imshow("img", image)
    cv2.imwrite("img_1.jpg", image)
    cv2.waitKey(0)
    
    

    效果图:

    在这里插入图片描述

    更多相关内容
  • 最小外接矩形面积(C++实现)求最小外接矩形的原理C++实现代码 求最小外接矩形的原理 最近在做课程设计的过程中遇到了一个问题,需要求出一幅图像中物体的矩形度,但是求解矩形度需要用到该物体的最小外接矩形的...

    求最小外接矩形的面积

    求最小外接矩形的原理

    最近在做课程设计的过程中遇到了一个问题,需要求出一幅图像中物体的矩形度,但是求解矩形度需要用到该物体的最小外接矩形的面积。所以我查了各种资料想要写一个求解物体最小外接矩形的代码。

    首先我们来看一下求解的原理。一个物体的与x轴和y轴平行的外接矩形就是这个物体的简单外接矩形,显然,物体的简单外接矩形是比较容易计算面积的。那么我们只需要将物体旋转一定的角度,再求出旋转后的简单外接矩形,最后得到最小的简单外接矩形的面积就行了,而旋转的角度在正负90°之间,以1°为1个间隔。

    因为我们只要求解面积而不需要将这个矩形画出来,所以可以采用C++中的set容器来实现,set容器具有自动排序的功能。

    大致实现算法如下:
    在这里插入图片描述

    C++实现代码

    // 求解最小外接矩形面积
    long lengthAndWidth(LPSTR lpSrcStartBits, long lSrcWidth, long lSrcHeight, int label)
    {
    	unsigned char* lpSrc;
    	int* pixel = new int[2];
    	pixel[0] = pixel[1] = 0;
    	long lLineBytes = WIDTHBYTES(lSrcWidth * 8);
    	// 旋转角度(弧度)
    	float	fRotateAngle;
    	// 旋转角度的正弦和余弦
    	float fSina, fCosa;
    	int rotate = 0;
    	long x0, y0;
    	std::set<int> setx,sety;
    	long min = 10000000;
    	long square = 0;
    	for (rotate = -90;rotate <= 90;rotate++)
    	{
    		// 将旋转角度从度转换到弧度
    		fRotateAngle = (float)((rotate)*PI / 180.0);
    		// 计算旋转角度的正弦
    		fSina = (float)sin((double)fRotateAngle);
    		// 计算旋转角度的余弦
    		fCosa = (float)cos((double)fRotateAngle);
    		for (long i = 0;i < lSrcHeight;i++)//旋转
    		{
    			for (long j = 0;j < lSrcWidth;j++)
    			{
    				lpSrc = (unsigned char*)lpSrcStartBits + lLineBytes * (lSrcHeight - 1 - i) + j;
    				if (*lpSrc == label)
    				{
    					x0 = j * fCosa - i * fSina + 0.5;
    					y0 = j * fSina + i * fCosa + 0.5;
    					setx.insert(x0);
    					sety.insert(y0);
    				}
    			}
    		}
    		square = abs((*setx.rbegin() - *setx.begin() + 1) * (*sety.rbegin() - *sety.begin() + 1));
    		if(min > square)
    		{
    			min = square;
    			pixel[0] = *setx.rbegin() - *setx.begin() + 1;
    			pixel[1] = *sety.rbegin() - *sety.begin() + 1;
    		}
    		setx.clear();sety.clear();
    	}
    	return (pixel[0]*pixel[1]);
     }
    

    当然这份代码只对8位图像有效,我们也可以参照算法把它改成适用于24位图像的代码。

    参考文章:
    https://zhuanlan.zhihu.com/p/97855964.

    展开全文
  • 包含多个区域的最小外接矩形''' image = cv2.imread('./label.png') B, G, R = cv2.split(image) ret, thresh = cv2.threshold(G, 128, 255, cv2.THRESH_BINARY) print(thresh.shape) # 单通道复制为三通道 ...代替...
  • Opencv中求点集的最小外结矩使用方法minAreaRect,求点集的最小外接圆使用方法minEnclosingCircle。minAreaRect方法原型:RotatedRect minAreaRect( InputArray points );输入参数points是所要求最小外结矩的点集...

    Opencv中求点集的最小外结矩使用方法minAreaRect,求点集的最小外接圆使用方法minEnclosingCircle。

    minAreaRect方法原型:

    RotatedRect minAreaRect( InputArray points );

    输入参数points是所要求最小外结矩的点集数组或向量;

    minEnclosingCircle方法原型:

    void minEnclosingCircle( InputArray points,

    CV_OUT Point2f& center, CV_OUT float& radius );

    第一个参数points是所要求最小外结圆的点集数组或向量;

    第二个参数Point2f类型的center是求得的最小外接圆的中心坐标;

    第三个参数float类型的radius是求得的最小外接圆的半径;

    使用minAreaRect和minEnclosingCircle方法分别求最小外接矩和圆:

    #include "core/core.hpp"

    #include "highgui/highgui.hpp"

    #include "imgproc/imgproc.hpp"

    #include "iostream"

    using namespace std;

    using namespace cv;

    int main(int argc,char *argv[])

    {

    Mat imageSource=imread(argv[1],0);

    imshow("Source Image",imageSource);

    Mat image;

    blur(imageSource,image,Size(3,3));

    threshold(image,image,0,255,CV_THRESH_OTSU);

    imshow("Threshold Image",image);

    //寻找最外层轮廓

    vector> contours;

    vector hierarchy;

    findContours(image,contours,hierarchy,RETR_EXTERNAL,CHAIN_APPROX_NONE,Point());

    Mat imageContours=Mat::zeros(image.size(),CV_8UC1);//最小外接矩形画布

    Mat imageContours1=Mat::zeros(image.size(),CV_8UC1); //最小外结圆画布

    for(int i=0;i

    {

    //绘制轮廓

    drawContours(imageContours,contours,i,Scalar(255),1,8,hierarchy);

    drawContours(imageContours1,contours,i,Scalar(255),1,8,hierarchy);

    //绘制轮廓的最小外结矩形

    RotatedRect rect=minAreaRect(contours[i]);

    Point2f P[4];

    rect.points(P);

    for(int j=0;j<=3;j++)

    {

    line(imageContours,P[j],P[(j+1)%4],Scalar(255),2);

    }

    //绘制轮廓的最小外结圆

    Point2f center; float radius;

    minEnclosingCircle(contours[i],center,radius);

    circle(imageContours1,center,radius,Scalar(255),2);

    }

    imshow("MinAreaRect",imageContours);

    imshow("MinAreaCircle",imageContours1);

    waitKey(0);

    return 0;

    }

    作图步骤:

    1. 对原始图像均值滤波并二值化;

    2. 求图像的最外层轮廓;

    3.  使用minAreaRect方法求轮廓的最小外接矩形,转化求得矩形的四个顶点坐标,并绘制矩形;

    4.  使用minEnclosingCircle方法求轮廓的最小外接圆,获取圆心和半径信息,并绘制圆;

    原始图像:

    最小外接矩:

    最小外接圆:

    opencv学习之路(26)、轮廓查找与绘制(五)——最小外接矩形

    一.简介 二.轮廓最小外接矩形的绘制 #include "opencv2/opencv.hpp" using namespace cv; void main() { //轮廓最小外 ...

    Opencv 最小外接矩形合并拼接

    前一篇画出了最小外接矩形,但是有时候画出来的矩形由于中间像素干扰或者是其他原因矩形框并不是真正想要的 如图1是一个信号的雨图,被矩形框分割成了多个小框: 需要合并矩形框达到的效果: 主要思想: 扫描两 ...

    Opencv 图片边缘检测和最小外接矩形

    #include "core/core.hpp" #include "highgui/highgui.hpp" #include "imgproc/i ...

    cv2&period;minAreaRect&lpar;&rpar; 生成最小外接矩形

    简介   使用python opencv返回点集cnt的最小外接矩形,所用函数为 cv2.minAreaRect(cnt) ,cnt是所要求最小外接矩形的点集数组或向量,这个点集不定个数.   cv2 ...

    BZOJ 1185&colon; &lbrack;HNOI2007&rsqb;最小矩形覆盖-旋转卡壳法求点集最小外接矩形&lpar;面积&rpar;并输出四个顶点坐标-备忘板子

    来源:旋转卡壳法求点集最小外接矩形(面积)并输出四个顶点坐标 BZOJ又崩了,直接贴一下人家的代码. 代码: #include"stdio.h" #include"str ...

    Opencv 改进的外接矩形合并拼接方法

    上一篇中的方法存在的问题是矩形框不够精确,而且效果不能达到要求 这里使用凸包检测的方法,并将原来膨胀系数由20缩小到5,达到了更好的效果 效果图: 效果图: 代码: #include

    OpenCV绘制直线,矩形和园

    首先导入我们所需要的库: import numpy as np import cv2 import matplotlib.pyplot as plt 自定义显示图像的函数: def show(imag ...

    opencv轮廓外接矩形

    1.寻找轮廓 api void cv::findContours( InputOutputArray image, OutputArrayOfArrays contours, OutputArray ...

    opencv —— boundingRect、minAreaRect 寻找包裹轮廓的最小正矩形、最小斜矩形

    寻找包裹轮廓的最小正矩形:boundingRect 函数 返回矩阵应满足:① 轮廓上的点均在矩阵空间内.② 矩阵是正矩阵(矩形的边界与图像边界平行). Rect boundingRect(InputA ...

    随机推荐

    Python中的&lowbar;&lowbar;init&lowbar;&lowbar;和&lowbar;&lowbar;new&lowbar;&lowbar;介绍

    介绍 首先我们要知道在面向对象编程中,实例化基本遵循创建实例对象.初始化实例对象.最后返回实例对象这么一个过程. Python 中的 __new__ 方法负责创建一个实例对象,__init__ 方法负 ...

    Striiv Myland 攻略

    推荐一款IOS平台上的运动APP:Striiv.可以记录平时的步数,路程,卡路里,运动时间.如果购买相应的硬件,还可以记录每天爬了多少台阶(这是专门为爬楼者用的么...). 其中比较吸引我的是里面有个 ...

    如何用Apache POI操作Excel文件-----如何对一个单元格加注解?

    有的时候,我们需要通过操作Apache POI,在生成Cell数据的同时,能对其生成的Cell,加上注解(comments),类似于下面的. 那么对于这种情况,我们的代码应该如何写呢? 借花献佛,我就 ...

    webServer xampp的安装及使用

    一.下载: 西装xampp1.73版本,其他版本可能会出错,为了你能顺利安装,最好用此版本: 二.安装: 1.安装路径,最好不要放到系统盘去[c:],建议非系统盘都可,尤其是早期的XAMPP版本可能默 ...

    A Tour of Go Methods with pointer receivers

    Methods can be associated with a named type or a pointer to a named type. We just saw two Abs method ...

    字符编码和python使用encode&comma;decode转换utf-8&comma; gbk&comma; gb2312

    ASCII码 标准ASCII码使用7位二进制数表示大写或小写字母,数字0到9标点符号以及在美式英语中使用的特殊控制字符. 在标准ASCII码中,最高位(b7)用作奇偶校验位,所谓奇偶校验,是指在代码传 ...

    vim 替换

    摘自: vim替换命令 替換(substitute) :[range]s/pattern/string/[c,e,g,i] range 指的是範圍,1,7 指從第一行至第七行,1,$ 指從第一行至最後 ...

    【C&plus;&plus;】C&plus;&plus;中变量的声明与定义的区别

    声明(declaration):意味着告诉编译器关于变量名称.变量类型.变量大小.函数名称.结构名称.大小等等信息,并且在声明阶段不会给变量分配任何的内存. 定义(definition):定义就是在变 ...

    自定义UITabbarcontrollerview

    // 初始化contentView [self initContentView]; #pragma mark 初始化contentView - (void)initContentView { CGSi ...

    C&num;之内存分配

    在C#中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区.里面的变量通常是局部变量.函数参数等 ...

    展开全文
  • 最小外接矩形

    2018-01-27 21:55:47
    凸包 蛮力 最小面积 最小外接矩形 文件选择 随机生成 凸包点位 然后求解
  • 求解最小外接矩形

    千次阅读 2018-12-27 14:15:43
     給出一个平面点集S,求一个面积最小矩形使其包含S所有的点。 预备知识:  在求解这道题之前我们先要了解一些关于凸包的知识。  什么是凸包?简单地说,对于一个平面点集S,我们把完全包含该...
    最小矩形(rec1)的解题报告
    作者:冯浩       时间: 2007.10.11  文档类型/出处:NOI专刊

    题目简述:

        給出一个平面点集S,求一个面积最小的矩形使其包含S所有的点。

    预备知识:

        在求解这道题之前我们先要了解一些关于凸包的知识。

        什么是凸包?简单地说,对于一个平面点集S,我们把完全包含该点集的最小的凸多边形叫做点集S的凸包H。

        凸包一个很重要的性质就是它“凸”的性质。这个性质对我们理解和计算凸包都有很大的帮助。

    I)               对点集S中任意一点a,当且仅当存在直线p过a点并使得S中除a外所有点均在p的一侧,则a为凸包上的一顶点。

    II)            对点集S中任意两点a,b,当且仅当S中除a,b以外所有点都在过点a,b的直线p的一侧,则线段ab为凸包上的一条边。

    III)          对点集S中任意四点a,b,c,d,当d在三角形abc中(包括边),则d不是凸包上的点。

      

        上面的几条关于凸包“凸”的性质为我们计算凸包提供了一个基础。这里我们将介绍两种简单且被广泛运用的算法――Gift-Wrapping和Graham-Scan算法。

     

    Gift-Wrapping算法:

        通过性质(I),我们可以找到一个特殊点,如具有最小y坐标且x坐标尽可能小的点。将它作为计算凸包的第一个顶点。确定了起点后,我们就可以通过Gift-Wrapping算法计算出点集的凸包。下面的步骤很直观的描述了这个算法:

    1)  把点集中所有点都看成是固定在平面上的柱子,想象我们在起始点柱子上系上一根身子。

    2)  把绳子沿水平方向向右拉直,并逆时针旋转,当绳子碰上一根柱子,则对应了凸包上的一点

    3)  继续旋转绳子,每次确定一个凸包上的顶点,直至绳子回到起点。

                  图一:Gift-Wrapping算法计算凸包的过程

    每次通过旋转绳子找到下一个凸包顶点需要对点集中所有剩余点进行一次比较,所以这

    一步的时间复杂度是O(n)。每个凸包上的顶点都需要进行一次旋转操作,而最坏情况下,凸包顶点个数可以和点集个数相等,所以整个Gift-Wrapping算法的时间复杂度是O(n2)的。

     

    Graham-Scan算法:

        Gift-Wrapping算法无论从理解还是从实现上来说,它都是十分简单的。但由于它的复杂度并不理想,我们无法利用它来求解大规模的凸包问题。因而,我们将介绍一种高效的计算凸包的算法――Graham-Scan。

       Graham-Scan算法主要可分成两部分:

    1)  同Gift-Wrapping一样,需要先找出一个起始点。将这个点作为原点,进行夹角排序。

    2)  先将起始点压入堆栈H中,再按照已经排好的顺序对每一个点进行扫描,同时维护堆栈H。这个堆栈表示的是到目前为止,所有已经扫描过的点对应的凸包。每当扫描一个点p的时候:

    a)       如果堆栈的元素少2个或者堆栈顶端的两个点与p构成左转关系,则将p压入堆栈中。

    b)      否则,栈顶元素出栈并继续进行a的判断。

    当所有点都扫描完后,堆栈H即为我们要求的凸包。

         图二:Graham-Scan算法的扫描过程(堆栈H储存的即实线连接起来的点)

    分析Graham-Scan的复杂度:第一步中找出起点并进行极角排序的复杂度是          O(n log n)。第二步中每一个点仅会被扫描一次并相应维护一次堆栈H 。而维护堆栈过程中每次访问堆栈H中的点,要么这个点被删除,要么就停止堆栈的维护,所以所有堆栈维护加起来最多只访问了2n次。故这部分的复杂度是O(n)。综合起来,Graham-Scan算法的时间复杂度是O(n log n)的。

    算法分析:

    现在考虑这道题目,题目要我们求出一个最小面积的矩形能够覆盖给定的所有点。易知矩形覆盖所有点当且仅当它覆盖这些点的凸包。故而,问题可以转化为对于一个凸包,求出一个面积最小的矩形来覆盖它。

    那么这个覆盖凸包的最小矩形有什么性质呢?

    首先,这个矩形的四条边上必然都有凸包的顶点。这个很容易想清楚,如果矩形的某条边没有碰上凸包的顶点,那么我们一定能把这条边向里压,从而得到一个更小的满足条件的矩形。

    其次,这个矩形至少有一条边与凸包上的一边重合。这个性质不容易直观地想清楚,需要书面证明一下。由于完整的证明需要分成很多情况来讨论,比较繁琐,所以这里仅选取其中的一种情况来证明,其他情况可以类似地进行证明。

    利用反证法,我们假设覆盖凸包的最小矩形所有边都没有和凸包的边有重合,也就是说,最小矩形的每条边上仅有一个凸包的顶点。如图三所示,矩形ABCD是覆盖凸包的最小矩形,M、N、P、Q为凸包在矩形四条边上的顶点。我们分别作MM’⊥ CD,NN’⊥ AD。则矩形ABCD的面积S = MP×Cos(∠PMM’)×NQ×Cos(∠QNN’)。我们将矩形旋转X度(顺时针为正,逆时针为负),仍使矩形覆盖凸包且M、N、P、Q分别在它的四边上。则此时新矩形的面积S = MP×Cos(∠PMM’+ X)×NQ×Cos(∠QNN’- X) 。我们仅需考虑Cos(∠PMM’+ X)×Cos(∠QNN’- X)的单调性。

    Cos(∠PMM’+ X)×Cos(∠QNN’- X)

    = 1/2[Cos(∠PMM’+ X + ∠QNN’- X) + Cos(∠PMM’+ X - ∠QNN’+ X)]

    = 1/2[Cos(∠PMM’+ ∠QNN’) + Cos(∠PMM’- ∠QNN’+ 2X)]

    ∵0≤∠PMM’< π/2 , 0≤∠QNN’< π/2

    ∴-π/2 <∠PMM’- ∠QNN’< π/2

    ∴Cos(∠PMM’- ∠QNN’)不可能取到最小值

    ∴x在0左边的一个区间中f(x) = Cos(∠PMM’- ∠QNN’+ 2X)递增,或x在0右边一个区间中f(x) = Cos(∠PMM’- ∠QNN’+ 2X)递减。

    因而,对于这样的矩形,我们总可以顺时针或逆时针旋转一个小角度,从而获得一个更小的矩形,这与假设矛盾。故最小矩形至少有一条边与凸包一边重合。

        了解到最小矩形所具有的这两个性质后,我们就能够很容易的想到一种算法,枚举凸包上哪条边与矩形的边重合,再找出在这条直线投影的正负方向上最远的和到直线距离最远的三点,从而确定和计算出矩形的面积,最后选取最小值,即为覆盖凸包的最小矩形的面积。

      我们用最朴素的方法去实现它,枚举每条边后再把剩余的点都扫描一遍,来找出另外三点,计算出矩形的面积。这样做时间复杂度是O(n2)得。就本题来说已经可以接受了。但如果规模再大一点,怎么办呢?我们能不能做得更好呢?

      答案是能!我们还有一个很重要的信息没有利用到,对凸包上任意一条边,依次计算出凸包顶点到它的距离或投影距离,构成的序列总是一个先增再降的。同时,注意到如果逆时针顺序枚举重合的边时,每次找出来的另外三点也总是在向逆时针方向移动。

      由此,我们就得到了一个更加高效的算法。枚举过程中,逆时针旋转到下一条边后不需要再重新扫描所有点,只要分别从上一条边确定的三点出发,向后比较,找到最大值,来更新这三个点即可。

    在枚举过程中,三个点的指针都只会对每个顶点访问一次,所以这个过程的平摊复杂度是O(n)的。结合前面计算凸包的过程,在O(n log n)的时间内我们就能够圆满地解决这题了。

        了解到最小矩形所具有的这两个性质后,我们就能够很容易的想到一种算法,枚举凸包上哪条边与矩形的边重合,再找出在这条直线投影的正负方向上最远的和到直线距离最远的三点,从而确定和计算出矩形的面积,最后选取最小值,即为覆盖凸包的最小矩形的面积。

    展开全文
  • 主要介绍了python opencv minAreaRect 生成最小外接矩形的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 使用python opencv返回点集cnt的最小外接矩形,所用函数为 cv2.minAreaRect(cnt) ,cnt是点集数组或向量(里面存放的是点的坐标),并且这个点集中的元素不定个数。同时还可以计算偏转角度 一、cv2.minAreaRect函数...
  • opencv-python 最小外接矩形

    千次阅读 2020-02-03 23:01:36
    opencv—python 最小外接矩形 (编程小白,如有问题还请各位大佬多指教) 所用函数: cv2.threshold() —— 阈值处理 cv2.findContours() —— 轮廓检测 cv2.boundingRect() —— 最大外接矩阵 cv2.rectangle() ——...
  • 凸四边形的最小外接矩形

    千次阅读 2019-02-26 09:09:58
    已知凸四边形的四条边及对角线长度,求具有最小面积外接矩形面积。 思路: 1 最初上来,没好的想法只能遍历,绕某个点转360度,求解析解; 2 发现不对,再遍历四个点; 3 绕重心旋转,遍历求最优近似解; 4...
  • 凸多边形最小面积外接矩形

    千次阅读 2017-11-04 11:24:08
    从技术上说, 给定一个方向, 能计算出 P 的端点并且构由此造出外接矩形。 但是我们需要测试每个情形来获得每个矩形来计算最小面积吗? 谢天谢地, 我们不必那么干。    对于多边形 P 的一个外接矩形存在一条边...
  • OpenCV python 轮廓(连通域)最小外接矩形 import cv2 import numpy as np def main(): # 1.导入图片 img_src = cv2.imread("cc.jpg") # 2.灰度化,二值化 img_gray = cv2.cvtColor(img_src, cv2.COLOR_BGR2...
  • C++/Qt:最小外接矩形

    千次阅读 2019-12-17 20:48:11
    以凸包的某条边作为矩形的一条边,求包围所有点的面积最小外接矩形。(感觉是对的)下图中蓝色为凸包,红色为MBR。 分享给有需要的人,代码质量勿喷。 一、求凸包,返回 xjListCH 参考:凸包 二、MBR中用到的函数 //...
  • 基于arcgis的最小外接矩形获取方法

    千次阅读 2021-07-06 10:09:52
    ArcToolbox => Data Management Tools => Features => Minimum Bounding Geometry
  • 提取图像的最小外接矩形

    千次阅读 2021-08-11 13:26:07
    实现提取图像的指定区域的最小外接矩形。 代码: Halcon实现: read_image (M1, 'C:/Users/15383/Desktop/insert/m1.jpg') dev_close_window() dev_open_window(0, 0, 512, 512, 'black', WindowHandle) dev_...
  • matlab实现画最小外接矩形

    热门讨论 2011-07-12 21:31:18
    matlab实现的,画最小外接矩形。其中包括求出最小外接矩形的四个顶点坐标,周长,面积等参数。
  • 最小外接矩形--最大内接矩形

    千次阅读 2020-01-09 20:51:44
    最小外接矩形 https://bitbucket.org/william_rusnack/minimumboundingbox/src/master/ 最大内接矩形 ...
  • 2018a版本MatLab利用regionprops函数获取图片中物体最小外接矩形本次内容,用于介绍利用matlab中的regionprops函数来获取图像区域中的物体的最小外接矩形信息(位置(x,y)、宽(△x)、高(△y))。1.regionprops函数...
  • 该函数仅对轮廓有效 cnt = get_region(cnt) contours, hierarchy = cv2.findContours(cnt, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE) boundRect=cv2.minAreaRect(contours[0]) ## 得到最小外接矩形的(中心(x,y), (宽,...
  • Blob工具提供这两个接口我们就可以通过脚本来获取它的几何信息了,如四个点的坐标等。
  • 求取shp文件中每一个形状的最小外接矩形。 根据每一个形状的最小外接矩形裁剪图像。 已知数据: 一个shp文件,包含若干个形状。 2.shp文件对应的影像。 工具 ARCGIS10.4 python2.7(ARCGIS自带) 步骤 一、...
  • * @brief :获取由凸包传来的点集,计算最小外接矩形,采用旋转卡壳算法 * @param[in] :凸包传来的点集,逆时针顺序的点集 * @param[out] : * @return :返回最小外接矩形的四个点集。顺时针方向 */ CUBECOM_...
  • opencv 最小外接矩形

    千次阅读 2019-11-26 21:27:26
    1. RotatedRect minRect = minAreaRect(contours[i]) (1)输入点集,如由findContours(image, contours, hiera, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE)查找得到的轮廓点集... (2)输出:RotatedRect 类矩形...
  • MATLAB求二值图像的最小外接矩形

    千次阅读 2021-05-03 21:36:46
    求二值图像的最小外接矩形算法描述步骤流程源代码结论 算法描述 计算最小外接矩形(MER)的一种方法是,将物体的边界以每次以一定的角度增量(例如3°)在90°范围内旋转。每旋转一次记录一次其坐标系方向上的外接...
  • 思路: 先散点建立凸包,然后用旋转卡壳的思想枚举边,枚举到每条边时,再找对应的最左、最右、最上方的一个点,这些点一定在外接矩形上,找到面积最小的矩形即可。 例题:最小矩形覆盖 #include<bits/stdc++.h&...
  • 037-OpenCV轮廓特征应用-最小外接矩形

    千次阅读 2022-02-05 22:01:51
    默认值INT_MAX # offset: 可选的轮廓偏移参数, 默认值Point() ''' cv2.drawContours(img, contours, -1, (0, 255, 255), 1) # 绘制轮廓 for cnt in contours: ''' cv2.minAreaRect(points) 轮廓最小外接矩形 # ...
  • 凸包最小外接矩形

    千次阅读 2019-06-30 17:07:14
    获取点的凸包之后,可以实现以下获取凸包的最小外接矩形,获取思路: 1、以其中两点作为矩形的一条边 2、以该边作为x轴基坐标,并做y轴基坐标 3、将所有点以该基坐标进行旋转,找到以该边为基准的所有点的x坐标的...
  • 提取二值化处理后图片中多个对象的最小外包矩形,以及外包矩形的集合属性信息。
  • 求点集的最小面积外接矩形

    千次阅读 2019-12-17 09:59:08
    求点集的最小面积外接矩形 void Rotate(float& x, float& y, float angle) { float a = x * cos(angle) - y * sin(angle); float b = x * sin(angle) + y * cos(angle); x = a; y = b; } void Rect...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,099
精华内容 1,239
关键字:

最小外接矩形面积