精华内容
下载资源
问答
  • 资源中包含了两个m文件。...minboundrect.m用于绘制运动目标的最小外接矩形框,可任意设置最小外接矩形角度。 本人做是视频中运动车辆检测,读者可自行更换检测算法以及参数调整以匹配不同运动场景。
  • 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个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区.里面的变量通常是局部变量.函数参数等 ...

    展开全文
  • 主要为大家详细介绍了Opencv绘制最小外接矩形最小外接圆方法,具有一定参考价值,感兴趣小伙伴们可以参考一下
  • 绘制最小外接矩形.cpp

    2021-02-19 20:30:45
    绘制轮廓的最小外接斜矩形最小外接正矩形最小外接圆,并将结果输出到原图像上,可参考博客:https://blog.csdn.net/didi_ya/article/details/113863388
  • 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方法求轮廓的最小外接圆,获取圆心和半径信息,并绘制圆;

    原始图像:

    j1hcxqsllk5.jpg

    最小外接矩:

    sx2yyytcwlm.jpg

    最小外接圆:

    5uorbzqqdxl.jpg

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

    展开全文
  • Opencv绘制最小外接矩形最小外接圆   Opencv中求点集的最小外结矩使用方法minAreaRect,求点集的最小外接圆使用方法minEnclosingCircle。 minAreaRect方法原型: RotatedRect minAreaRect( InputArray ...

    Opencv绘制最小外接矩形、最小外接圆

     

    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<vector<Point>> contours;  
        vector<Vec4i> 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<contours.size();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方法求轮廓的最小外接圆,获取圆心和半径信息,并绘制圆;

     

    原始图像:

     

    最小外接矩:

     

    最小外接圆:

    展开全文
  • boundingRect函数:计算出轮廓垂直边界最小矩形赋给ploy_rects[i] minEnclosingCircle(contours_ploy[i], ccs[i], radius[i]); // minEnclosingCircle函数参数:1.输入点集 2.输出圆心坐标 3.输出圆半径 ...

     

     

     

     

     

     

     

     代码:

     

    #include <opencv2/opencv.hpp>
    #include <iostream>
    #include <math.h>
    
    using namespace std;
    using namespace cv;
    Mat src, gray_src, drawImg;
    int threshold_v = 170;         //阈值二值化的初始值为170
    int threshold_max = 255;       //最大值为255
    const char* output_win = "rectangle-demo";
    RNG rng(12345);
    void Contours_Callback(int, void*);
    int main(int argc, char** argv) {
        src = imread("L:/13.jpg");
        if (!src.data) {
            printf("could not load image...\n");
            return -1;
        }
        cvtColor(src, gray_src, CV_BGR2GRAY);
        blur(gray_src, gray_src, Size(3, 3), Point(-1, -1));
    
        const char* source_win = "input image";
        namedWindow(source_win, CV_WINDOW_AUTOSIZE);
        namedWindow(output_win, CV_WINDOW_AUTOSIZE);
        imshow(source_win, src);
    
        createTrackbar("Threshold Value:", output_win, &threshold_v, threshold_max, Contours_Callback);
        //创建阈值拖动窗口,回调Contours_Callback函数
        Contours_Callback(0, 0);
    
        waitKey(0);
        return 0;
    }
    
    void Contours_Callback(int, void*) {
        Mat binary_output;                 //定义一个二值化的输出矩阵
        vector<vector<Point>> contours;    //point点集的二维数组,数组的个数和每个数的长度都是可变
        vector<Vec4i> hierachy;            //4i四维的整数,个数可变
        threshold(gray_src, binary_output, threshold_v, threshold_max, THRESH_BINARY); //二值化
        imshow("binary image", binary_output);
        findContours(binary_output, contours, hierachy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(-1, -1));//找出轮廓
    
        vector<vector<Point>> contours_ploy(contours.size());  //定义一个输出轮廓的点集,与contours一样的
        vector<Rect> ploy_rects(contours.size());             //
        vector<Point2f> ccs(contours.size());                //圆心
        vector<float> radius(contours.size());               //半径
    
        vector<RotatedRect> minRects(contours.size());   //定义最小旋转矩形数组
        vector<RotatedRect> myellipse(contours.size());  //定义最小圆数组
    
        for (size_t i = 0; i < contours.size(); i++) {
    
            approxPolyDP(Mat(contours[i]), contours_ploy[i], 3, true);
    //多边形拟合:approxPolyDP函数参数:1.图像轮廓点集  2.输出多边形点集 3.两个轮廓之间最大距离 4.是否为封闭图形
            ploy_rects[i] = boundingRect(contours_ploy[i]);
            //boundingRect函数:计算出轮廓的垂直边界最小矩形赋给ploy_rects[i]
            minEnclosingCircle(contours_ploy[i], ccs[i], radius[i]);
            //minEnclosingCircle函数参数:1.输入点集  2.输出圆心坐标 3.输出圆半径
            if (contours_ploy[i].size() > 5) {          //绘制图形时边界不能低于5个像素
                myellipse[i] = fitEllipse(contours_ploy[i]);
                minRects[i] = minAreaRect(contours_ploy[i]);
            }
        }
    
        // draw it
        drawImg = Mat::zeros(src.size(), src.type());  //定义一个src大小和类型的矩阵给drawImg
        Point2f pts[4];                                //定义一维数组分别为每个矩形的四个点
        for (size_t t = 0; t < contours.size(); t++) {
            Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)); //颜色取随机
            //rectangle(drawImg, ploy_rects[t], color, 2, 8);
            //circle(drawImg, ccs[t], radius[t], color, 2, 8);
            if (contours_ploy[t].size() > 5) {
                ellipse(drawImg, myellipse[t], color, 1, 8);
                minRects[t].points(pts);
                for (int r = 0; r < 4; r++) {
                    line(drawImg, pts[r], pts[(r + 1) % 4], color, 1, 8);  
                    //找每个矩形的四个点连线,第四个点过界取模4运算回到pts[0]
                }
            }
        }
    
        imshow(output_win, drawImg);
        return;
    }

     

    结果:

         

     

     

     

    转载于:https://www.cnblogs.com/Jack-Elvis/p/11552829.html

    展开全文
  • C++ OpenCV4绘制轮廓最小外接矩形使用方法发生了一些变化: OpenCV2/3代码: findContours(srcImg, contours, hierarcy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE); cout<<"num="<<contours.size...
  • MATLAB实现绘制连通域最小外接矩形

    千次阅读 2018-05-16 19:10:32
    方法主要是利用面积最小实现。代码如下:function main() I=imread('4.jpg'); bw=im2bw(I); [r c]=find(bw==1);... % 'a'是按面积算的最小矩形,如果按边长用'p' imshow(bw);hold on line(rectx...
  • OpenCV提供了函数approxPolyDP()、boundRect()、minEnclosingCircle()分别计算给定点集外接多边形,最小立式矩形最小外接圆,下面分别给出这三个函数原型和参数意义。 approxPolyDP函数(计算外接多边形): ...
  • 对下面这张图像,检测其边界框、最小矩形区域以及最小闭圆轮廓。 hammer.jpg 使用cv2.pyrDown()函数缩小图片。 使用cv2.threshold()函数进行二值化处理。 使用cv2.findContours()函数检测轮廓。 使用cv...
  • 二、轮廓最小外接矩形的绘制 1 #include "opencv2/opencv.hpp" 2 using namespace cv; 3 4 void main() 5 { 6 //轮廓最小外接矩形的绘制 7 Mat srcImg = imread("E://00.png"); 8 Mat dstImg = ...
  • 基于VC 6.0的最小包络图形绘制及其应用,李远彬,林小凤,最小包络线计算在计算机图形学中是一个很重要方面,最小包络矩形、圆、正方形等等在实际中应用十分广泛。最小包络矩形普遍应
  • 绘制如上图片的最小内接矩阵: def draw_min_rect_rectangle(mask_path): image = cv2.imread(mask_path) thresh = cv2.Canny(image, 128, 256) contours, hierarchy = cv2.findContours(thresh, cv2.RETR_...
  • 一、获取轮廓: 主要使用OpenCVcv2.findContours()方法: findContours( InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, ...
  • 有两个`UIView`,需要绘制一个矩形,或获取两个`UIView`框架最小的矩形。 应该怎么实现?
  • minAreaRect()函数返回矩形的注意点 minAreaRect()函数主要用来返回某个轮廓的最小包含矩形,可以是倾斜的,经常与findContours()配合使用,今天用到了觉得需要注意以下几点,同时也比较容易遗忘,特此记录一篇,供...
  • 我就废话不多说了,大家还是直接看代码吧! print("thresh =",thresh) coords = np.column_stack(np.where(thresh ...box = cv2.boxPoints(min_rect)//获取最小矩形的4个顶点坐标。 但是通过一下这个绘制矩形函数,画
  • 最小外接矩形思路以及实现

    千次阅读 2019-02-25 08:23:04
    最小外接矩形 ...对凸多边形每一条边都绘制一个外接矩形最小面积。下图展示了计算流程 计算流程 旋转基础算法实现 旋转点基础 /** * 旋转点 * * @param point 被旋转点 * @param center ...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 291
精华内容 116
关键字:

最小矩形的绘制