精华内容
下载资源
问答
  • 主要为大家详细介绍了Opencv绘制最小外接矩形、最小外接圆的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • openCV中,使用最小外接矩形来定位目标是一个很常用的功能。有时,我们需要把矩形的中心和方向展示出来,这时,可以使用cv2.arrowedLine()来实现这一目标。具体实现方法如下: 首先,我们需要使用cv2....

            在openCV中,使用最小外接矩形来定位目标是一个很常用的功能。有时,我们需要把矩形的中心和方向展示出来,这时,可以使用cv2.arrowedLine()来实现这一目标。具体实现方法如下:

            首先,我们需要使用cv2.minAreaRect来获取最小外接矩形的参数,例如

    rect = cv2.minAreaRect(contours[max_index])

            获取到的rect结果为((中心点坐标),(宽度,高度),角度)。得到的结果中的宽度和高度并不是按照长短来划分的,而是旋转矩形中接近水平的边为宽度值,接近垂直的边为长度值。rect中角度指的是接近水平的边与水平线的夹角。而通常我们所需要的是“较长边为长度,较短边为宽度,沿长边方向是外接矩形的方向”。所以,接下来我们需要对这个情况做出修改。当发生长度值小于宽度值的情况时,我们就把长宽值交换,并且把角度增加90度。这时,所有的oritation都是与短边平行的,我们再次把角度增加90度,即可实现所有oritation都与长边平行。最后,把角度统一保留至0-180.

        if(width > length):
            width,length = length,width
            oritation = oritation + 90
        oritation = oritation + 90
        if(oritation > 180):
            oritation = oritation - 180

            获取了外接矩形的oritation后,我们就可以将区域center作为箭头的起点,按照oritation方向,计算长度为L的箭头的终点坐标。

                        arrow_end_x = int(x + math.cos(oritation / 180 * 3.14) * L)
                        arrow_end_y = int(y + math.sin(oritation / 180 * 3.14) * L)

            最后,使用cv2. arrowedLine()来画出箭头。

    展开全文
  • 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方法求轮廓的最小外接圆,获取圆心和半径信息,并绘制圆;

     

    原始图像:

     

    最小外接矩:

     

    最小外接圆:

    展开全文
  • C++ OpenCV4绘制轮廓最小外接矩形

    千次阅读 2020-04-13 18:59:01
    C++ OpenCV4绘制轮廓最小外接矩形使用方法发生了一些变化: OpenCV2/3的代码: findContours(srcImg, contours, hierarcy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE); cout<<"num="<<contours.size...

    C++ OpenCV4绘制轮廓最小外接矩形使用方法发生了一些变化:

    OpenCV2/3的代码:

    findContours(srcImg, contours, hierarcy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
    cout<<"num="<<contours.size()<<endl;
    vector<Rect> boundRect(contours.size());  //定义外接矩形集合
    vector<RotatedRect> box(contours.size()); //定义最小外接矩形集合
    Point2f rect[4];
    for(int i=0; i<contours.size(); i++)
    {
    	box[i] = minAreaRect(Mat(contours[i]));  //计算每个轮廓最小外接矩形
    	boundRect[i] = boundingRect(Mat(contours[i]));
    		
    	circle(dstImg, Point(box[i].center.x, box[i].center.y), 5, Scalar(0, 255, 0), -1, 8);              
        //绘制最小外接矩形的中心点
    	box[i].points(rect);  //把最小外接矩形四个端点复制给rect数组
    		
    	rectangle(dstImg, Point(boundRect[i].x, boundRect[i].y), Point(boundRect[i].x + 
           boundRect[i].width, boundRect[i].y + boundRect[i].height), Scalar(0, 255, 0), 2, 8);
    	for(int j=0; j<4; j++)
    	{
    		line(dstImg, rect[j], rect[(j+1)%4], Scalar(0, 0, 255), 2, 8);  //绘制最小外接矩形每条边
    	}
    	
    }	

    OpenCV4的代码(区别部分)

    RotatedRect box = minAreaRect(Mat(contours[0]));  //计算每个轮廓最小外接矩形
    vector<Point2f> boxPts(4);
    box.points(boxPts.data());
    
    for (int j = 0; j < 4; j++)
    {
    	line(ROI, boxPts[j], boxPts[(j + 1) % 4], Scalar(0, 0, 255), 2, 8);  //绘制最小外接矩形每条边
    }

     

    展开全文
  • opencv 获取最小外接矩形

    千次阅读 2019-05-19 16:21:31
    #include "opencv.hpp" using namespace std; using namespace cv; int main() { Mat grayImage, dstImage, resultImage; Mat Image = imread("test.png"); resultImage = Image.clone();...
    #include "iostream";
    #include "opencv.hpp"
    using namespace std;
    using namespace cv;
    
    int main()
    {
    	Mat grayImage, dstImage, resultImage;
    	Mat Image = imread("test.png");
    	resultImage = Image.clone();
    	imshow("原图", Image);
    	cvtColor(Image, grayImage, COLOR_RGB2GRAY);
    	threshold(grayImage, dstImage, 100, 255, THRESH_BINARY);
    	//imshow("二值化", dstImage);
    
    	vector<vector<Point>> contours;
    	vector<Vec4i> hierarcy;
    	findContours(dstImage, contours, hierarcy, RETR_EXTERNAL, CHAIN_APPROX_NONE);
    	vector<RotatedRect> box(contours.size()); //最小外接矩形
    	Point2f rect[4];
    	float width = 0;//外接矩形的宽和高
    	float height = 0;
    	float ratio = 0;  //存储长宽比=width/heigth
    
    	for (int i = 0; i < contours.size(); i++)
    	{
    		box[i] = minAreaRect(Mat(contours[i]));
    		box[i].points(rect);          //最小外接矩形的4个端点
    		width = box[i].size.width; 
    		height = box[i].size.height;
    		if (height >= width)
    		{
    			float x = 0;
    			x = height;
    			height = width;
    			width = x;
    		}
    		ratio = width / height;
    		cout << "宽" << width << " " << "高" << height << "长宽比"<<ratio<<endl;
    		for (int j = 0; j < 4; j++)
    		{
    			line(resultImage, rect[j], rect[(j + 1) % 4], Scalar(0, 0, 255), 1, 8);//绘制最小外接矩形的每条边
    		}
    	}
    
    	namedWindow("结果图", 1);
    	imshow("结果图", resultImage);
    	waitKey(0);
        return 0;
    }

    运行结果:

    展开全文
  • python+opencv获取最小外接矩形

    千次阅读 2020-09-03 15:48:10
    python+opencv获取最小外接矩形环境代码效果 环境 python版本:3.8 opencv版本:4.3.0.36 代码 from PIL import Image from pylab import * import cv2 import numpy as np # 读取图像到数组中 im = array(Image....
  • 使用python opencv返回点集cnt的最小外接矩形,所用函数为 cv2.minAreaRect(cnt) ,cnt是所要求最小外接矩形的点集数组或向量,这个点集不定个数。 举例说明:画一个任意四边形的最小外接矩形,其中 cnt 代表该...
  • opencv-python最小外接矩形

    千次阅读 2021-05-06 18:18:02
    所用函数: ...cv2.minAreaRect —— 找到最小外接矩形(矩形具有一定的角度) cv2.boxPoints —— 外接矩形的坐标位置 cv2.drawContours(image, [box], 0, (0, 0, 255), 3) —— 根据点画出矩形 # -*- cod
  • opencv画出最小外接矩形,需要定义minRects类型的类,然后获取四个角点,并通过line函数将四个角点连接起来。minRects类型,可以返回四个角点的信息,我们可以通过各种计算方式,为自己提供更多的可用参数,从而更好...
  • 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 类矩形...
  • OpenCV找出最小外接矩形

    万次阅读 2017-10-22 14:54:38
    提取轮廓找出最小外接矩形
  • height > 100: # 最小的外接矩形 rect = cv2.minAreaRect(cnt) box = cv2.boxPoints(rect) # 获取最小外接矩形的4个顶点 box = np.int0(box) #cv2.drawContours(img, [box], 0, (255, 0, 255), 2) if 0 not in box....
  • 任务:给定这样一张图片求图片中白色区域的外接矩形、最小外接矩形、拟合多边形以及外接圆 外接矩形 x, y, w, h = cv2.boundingRect(points) 输入:点集 返回值:左上角点坐标以及宽高 实现代码: import cv2 ...
  • //最小外接矩形画布 for (int i = 0; i (); i++) { //绘制轮廓 drawContours(drawingPicture, contours, i, Scalar(255), 1, 8, hierarchy); //绘制轮廓的最小外结矩形 RotatedRect rect = ...
  • opencv最小外接矩形2 的算法

    千次阅读 2015-04-14 16:54:09
    Cvbox2D 本文来自CSDN博客,转载请标明... ...之前用到opencv最小外接矩形去表示一个类椭圆形的高度,特此记录备查。 对给定的 2D 点集,寻找最小面积的包围矩形,使用函数: CvBox2D cvMinAreaRect2( const 
  • 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...
  • opencv最小外接矩阵

    千次阅读 2018-11-08 19:46:40
    求最小外接矩阵的基本原理: ...旋转之后,求出新的minx,maxx,miny,maxy,计算此时的面积,直到面积达到最小,对应的即为最小外接矩形。 关于图像旋转参考:https://blog.csdn.net/zhouxuguang236/article/de...
  • 在图像裁剪操作中,opencv和pillow两个库都具有相应的函数,但是这两个库中的函数仅仅能对与图片平行的矩形进行裁剪操作,如果想要对目标的最小外接矩形进行裁剪该如何操作呢?如下所示: 具体处理该问题的思路如下...
  • //绘制最小外接矩阵红色框绘制 for (int j = 0; j ; j++) { line(dstImg, rect[j], rect[(j + 1) % 4], Scalar(0, 0, 255), 2, 8);// } imshow("外接矩阵", dstImg); //最小外接矩阵的角度,根据角度对最小外接矩阵...
  • 转载自:... OpenCV中求点集的最小外结矩使用方法minAreaRect,求点集的最小外接圆使用方法minEnclosingCircle。 minAreaRect方法原型: RotatedRect minAreaRect( InputArray points ); 
  • 详细介绍了利用OpenCV进行轮廓的查找与绘制,但是实战中发现,我们经常需要绘制最大轮廓(主要目的是将小轮廓等噪声去除)以及绘制轮廓的外接矩形。下面这篇文章详细介绍一下如何绘制最大轮廓自己绘制轮廓的外接矩形...
  • 本文作者Color Space,文章未经作者允许禁止转载! 本文将介绍OpenCVSharp轮廓特征属性及应用(三)---最小外接矩形

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 911
精华内容 364
关键字:

opencv绘制最小外接矩形