OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合

这篇具有很好参考价值的文章主要介绍了OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.轮廓外接最大矩形boundingRect()

2.轮廓外接最小矩形minAreaRect()

3.轮廓外接多边形approxPolyDP()


1.轮廓外接最大矩形boundingRect()

Rect cv::boundingRect ( InputArray array )

  • array:输入的灰度图像或者2D点集,数据类型为vector<Point>或者Mat。

示例代码:

//轮廓最大外接矩阵
void Contour_external_maxmatrix(Mat image) {
    Mat gray,binary;
    cvtColor(image,gray,COLOR_BGR2GRAY);//灰度化
    GaussianBlur(gray,gray,Size(9,9),2,2);//滤波
    threshold(gray,binary,170,255,THRESH_BINARY|THRESH_OTSU);//自适应二值化
    //轮廓检测
    vector<vector<Point>> contours;//轮廓
    vector<Vec4i> hierarchy;//存放轮廓结构变量
    findContours(binary,contours,hierarchy,RETR_TREE,CHAIN_APPROX_SIMPLE,Point());
    //寻找轮廓的外接矩阵
    for(int n=0;n<contours.size();n++) {
        //最大外接矩阵
        Rect rect = boundingRect(contours[n]);
        rectangle(image, rect, Scalar(7, 67, 255), 2, 8, 0);
    }
    imwrite("/sdcard/DCIM/max.png",image);
}

 轮廓外接最大矩形的结果:

OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合,Android之OpenCV,opencv,人工智能,计算机视觉,C++

2.轮廓外接最小矩形minAreaRect()

RotatedRect cv::minAreaRect ( InputArray points )

  • array:输入的灰度图像或者2D点集,数据类型为vector<Point>或者Mat。

示例代码:


//轮廓最小外接矩阵
void Contour_external_minmatrix(Mat image){
    Mat gray,binary;
    cvtColor(image,gray,COLOR_BGR2GRAY);//灰度化
    GaussianBlur(gray,gray,Size(9,9),2,2);//滤波
    threshold(gray,binary,170,255,THRESH_BINARY|THRESH_OTSU);//自适应二值化
    //轮廓检测
    vector<vector<Point>> contours;//轮廓
    vector<Vec4i> hierarchy;//存放轮廓结构变量
    findContours(binary,contours,hierarchy,RETR_TREE,CHAIN_APPROX_SIMPLE,Point());
    //寻找轮廓的外接矩阵
    for(int n=0;n<contours.size();n++) {
          //最小外接矩阵
        RotatedRect rrect= minAreaRect(contours[n]);
        Point2f points[4];
        rrect.points(points);//读取最小外接矩阵的四个顶点
        Point2f cpt=rrect.center;//最小外接矩阵的中心
        //绘制旋转矩阵与中心位置
        for(int i=0;i<4;i++){
            if(i==3){
                line(image,points[i],points[0],Scalar(0,0,255,255),2,8,0);
                break;
            }
            line(image,points[i],points[i+1],Scalar(0,0,255,255),2,8,0);
        }
        //绘制矩阵中心
        circle(image,cpt,4,Scalar(0,0,255,255),-1,8,0);
    }
   imwrite("/sdcard/DCIM/min.png",image);

}

 轮廓外接最小矩形的结果:

OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合,Android之OpenCV,opencv,人工智能,计算机视觉,C++ 

3.轮廓外接多边形approxPolyDP()

void cv::approxPolyDP (InputArray curve,

OutputArray approxCurve,

double    epsilon,

bool      closed

  • curve:输入轮廓像素点。
  • approxCurve:多边形逼近结果,以多边形顶点坐标的形式给出
  • epsilon:逼近的精度,即原始曲线和逼近曲线之间的最大距离。
  • closed:逼近曲线是否为封闭曲线的标志, true表示曲线封闭,即最后一个顶点与第一个顶点相连

示例代码:


void drawapp(Mat result,Mat img2){
    for(int i=0;i<result.rows;i++){
        //最后一个坐标点与第一个坐标点连接
        if(i==result.rows-1){
            Vec2i point1=result.at<Vec2i>(i);
            Vec2i point2=result.at<Vec2i>(0);
            line(img2,point1,point2,Scalar(0,0,255,255),4,8,0);
            break;
        }
        Vec2i point1=result.at<Vec2i>(i);
        Vec2i point2=result.at<Vec2i>(i+1);
        line(img2,point1,point2,Scalar(0,0,255,255),4,8,0);
    }

}

//轮廓多边形拟合
void Contour_external_matrix(Mat image){
    Mat gray,binary;
    cvtColor(image,gray,COLOR_BGR2GRAY);//灰度化
   // GaussianBlur(gray,gray,Size(9,9),2,2);//滤波
   // threshold(gray,binary,170,255,THRESH_BINARY|THRESH_OTSU);//自适应二值化
    //轮廓的发现与绘制
    vector<vector<Point>> contours;//轮廓
    vector<Vec4i> hierarchy;//存放轮廓结构变量
    findContours(gray,contours,hierarchy,RETR_TREE,CHAIN_APPROX_SIMPLE,Point());
    //绘制多边形
    for(int n=0;n<contours.size();n++) {
        //用最小外接矩阵求取轮廓中心
        RotatedRect rrect= minAreaRect(contours[n]);
        Point2f center=rrect.center;//最小外接矩阵的中心
        circle(image,center,2,Scalar(0,0,255,255),2,8,0);
        Mat result;
        approxPolyDP(contours[n],result,4,true);//多边形拟合
        drawapp(result,image);
    }
    imwrite("/sdcard/DCIM/matrix.png",image);

}

多边形拟合的结果:

OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合,Android之OpenCV,opencv,人工智能,计算机视觉,C++文章来源地址https://www.toymoban.com/news/detail-704531.html

到了这里,关于OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV——最小外接矩形

      emspminAreaRect 函数用于计算给定点集的最小外接矩形。该矩形的长和宽是可以任意旋转的,因此被称为旋转矩形。 points :是一个包含点集的 Mat 对象。点集可以是二维点集或三维点集,但是只有前两个坐标被使用。返回值是一个 RotatedRect 对象,表示最小外接矩形。 该函数

    2024年02月05日
    浏览(35)
  • OPENCV C++(七)霍夫线检测+找出轮廓和外接矩形+改进旋转

    霍夫线检测  定义存放输出线的向量 此向量输出有距离,角度 因为检测的原理就是在变换霍夫空间里面去检测的,这里可以理解为极坐标 第3个参数是距离精度 第四个参数是角度精度,第五个是阈值,只有点超过90个才算一条线 在图中画线操作: 这里是画线操作  概率霍夫

    2024年02月13日
    浏览(31)
  • 【Python】【OpenCV】绘制外接矩形、外接圆 以及 凸轮廓和Douglas-Peucker算法

     外接矩形、外接圆:   1、cv2.boundingRect() Method 和 cv2.minAreaRect() Merhod:前者只寻找和 x、y轴 平行的矩形,后者则可以出现旋转角度。 2、cv2.drawContours() Method:第二个参数接收的是轮廓信息,但是这个轮廓信息需要以 tuple or list or set类型(或者说是iterable)才可以传入。 请注

    2024年02月05日
    浏览(35)
  • 【OpenCV常用函数:轮廓检测+外接矩形检测】cv2.findContours()+cv2.boundingRect()

    对具有黑色背景的二值图像寻找白色区域的轮廓,因此一般都会先经过cvtColor()灰度化和threshold()二值化后的图像作为输入。 例如,如下的轮廓检测出的结果contours和hierarchy。 根据轮廓点检测对应轮廓的外接矩形

    2024年02月13日
    浏览(34)
  • OpenCV:绘制图像中mask的最小外接矩形

    在计算机视觉和图像处理中,我们经常需要计算直线与外接矩形边的交点。这在进行边缘检测、图像分割、目标跟踪等任务时非常有用。本文将介绍如何使用OpenCV和NumPy计算直线与外接矩形边的交点,并展示如何在实际图像中绘制直线。 使用OpenCV的findContours函数寻找图像中的

    2024年01月24日
    浏览(33)
  • 计算点集的最小外接矩形——OpenCV的minAreaRect函数

    输入一系列二维点,返回其最小外接矩形。 根据函数原型,输入的数据可以是 vectorPoint 类型,包含1个以上的点; 返回值是 RotatedRect 类型,该类型的定义如下: 对于用户而言,最重要的是三个属性: center 、 size 、 angle 。其中 size 和 angle 需要着重介绍一下: RotatedRect的si

    2024年04月14日
    浏览(28)
  • 【opencv】示例-minarea.cpp 如何寻找一组随机生成的点的最小外接矩形、三角形和圆...

    此段代码的主要功能是:利用OpenCV库生成随机点集,并计算并展示这些点的最小外包矩形、三角形和圆形。用户可以通过按键重新生成不同的随机点集,或者按ESC/Q退出程序。程序中利用了OpenCV的随机数生成函数、绘图函数以及几何形状的计算函数。

    2024年04月14日
    浏览(40)
  • Halcon画矩形框(正矩形和最小外接矩形)

    1.正矩形框 正矩形框,指的是没有发生倾斜,竖直的矩形框。 该矩形框,不仅能够完全覆盖region区域,而且还不发生倾斜,可以用在一些特定的瑕疵标定。 具体代码如下: 其中,smallest_rectangle1 算子的作用是,获取region的最小外接正矩形。输出Row1(左上y坐标),Column1(左

    2024年02月11日
    浏览(44)
  • python opencv 绘制矩形、圆、线、多边形

    👨‍💻 个人简介: 深度学习图像领域工作者 🎉 总结链接:              链接中主要是个人工作的总结,每个链接都是一些常用demo,代码直接复制运行即可。包括:                     📌 1.工作中常用深度学习脚本                     📌 2.to

    2024年02月03日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包