精华内容
下载资源
问答
  • 主要为大家详细介绍了Opencv绘制最小外接矩形、最小外接圆的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了Opencv实现最小外接矩形和圆,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 使用python opencv返回点集cnt的最小外接矩形,所用函数为 cv2.minAreaRect(cnt) ,cnt是点集数组或向量(里面存放的是点的坐标),并且这个点集不定个数。 举例说明:画一个任意四边形(任意多边形都可以)的最小...
  • 使用opencv画出图形的最小外接矩形与最小外接圆,首先出图形的轮廓,设有滚动条可以选择最佳阈值,然后画出图形的最小外接圆与最小外接矩形,算法的效果很好!
  • 主要为大家详细介绍了OpenCV实现最小外接矩形,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 包含多个区域的最小外接矩形''' 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 获取最小外接矩形

    千次阅读 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获取最小外接矩形

    环境

    python版本:3.8
    opencv版本:4.3.0.36

    代码

    from PIL import Image
    from pylab import *
    import cv2
    import numpy as np
    
    # 读取图像到数组中
    im = array(Image.open('./001.bmp'))
    
    # 定义边界点
    xs = [190.5,167.5,144.5,128.5,114.5,100.5,97.5,82.5,71.5,62.5,45.5,33.5,23.5,10.5,9.5,9.5,18.5,20.5,14.5,17.5,16.5,25.5,26.5,37.5,50.5,61.5,75.5,80.5,82.5,83.5,107.5,131.5,137.5,176.5,193.5,200.5,203.5,217.5,239.5,254.5,270.5,288.5,304.5,327.5,341.5,363.5,377.5,388.5,397.5,402.5,388.5,381.5,374.5,375.5,367.5,363.5,358.5,363.5,353.5,340.5,339.5,335.5,326.5,311.5,279.5,239.5,211.5,190.5]
    ys = [374.13,366.13,363.13,361.13,365.13,361.13,357.13,362.13,373.13,376.13,369.13,365.13,354.13,342.13,329.13,317.13,311.13,296.13,283.13,272.13,258.13,247.13,216.13,184.13,158.13,129.13,98.13,82.13,52.13,42.13,34.13,31.13,15.13,10.12,13.13,26.13,31.13,22.13,22.13,28.13,41.13,54.13,65.13,81.13,92.13,97.13,112.13,148.13,176.13,192.13,204.13,213.13,223.13,245.13,255.13,269.13,281.13,296.13,302.13,313.13,325.13,338.13,358.13,381.13,391.13,390.13,380.13,374.13]
    
    plt.plot(xs, ys, 'r*') # 绘制边界点
    
    # 获取最小外接矩形
    contour = np.vstack((xs, ys)) #将x,y竖着拼接
    contour = np.array(contour.T, dtype=np.float32)
    rect = cv2.minAreaRect(contour) # 得到最小外接矩形的(中心(x,y), (宽,高), 旋转角度)
    box = cv2.boxPoints(rect) # cv2.boxPoints(rect) for OpenCV 3.x 获取最小外接矩形的4个顶点坐标
    box = np.int0(box)
    
    # 绘制最小外接矩形
    plt.plot(box[1], box[0], color='g')
    plt.plot(box[2], box[1], color='g')
    plt.plot(box[3], box[2], color='g')
    plt.plot(box[0], box[3], color='g')
    
    # 添加标题,显示绘制的图像
    
    title("pic1.png")
    imshow(im)
    plt.show()
    

    效果

    在这里插入图片描述

    展开全文
  • opencv求最小外接矩阵

    千次阅读 2018-11-08 19:46:40
    最小外接矩阵的基本原理: ...旋转之后,出新的minx,maxx,miny,maxy,计算此时的面积,直到面积达到最小,对应的即为最小外接矩形。 关于图像旋转参考:https://blog.csdn.net/zhouxuguang236/article/de...

    求最小外接矩阵的基本原理:

    获取点簇最开始的minx,maxx,miny,maxy确定最初的外接矩形,求外接矩形的面积,然后对点簇进行旋转,按照下面公式即可:

    旋转之后,求出新的minx,maxx,miny,maxy,计算此时的面积,直到面积达到最小,对应的即为最小外接矩形。

    关于图像旋转参考:https://blog.csdn.net/zhouxuguang236/article/details/31820095

     

    1.输入是一幅图,如边缘图(如canny边缘检测后,仅有0与255)

           测试代码:

            vector<vector<Point>> contours;
            vector<Vec4i> hierarchy;
            findContours(edge, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_NONE, Point());
            Mat imageContours = Mat::zeros(edge.size(), CV_8UC1);
            int idx, maxcontours = 0;
            vector<Point> selectpoint;
            for (int i = 0; i < contours.size(); i++)//有可能识别出几组点簇分布,取出最大的点簇
            {
                vector<Point> ptmp = contours[i];
                if (ptmp.size() > maxcontours)
                {
                    selectpoint = ptmp;
                    idx = i;
                }
            }

            //绘制轮廓
            drawContours(imageContours, contours, idx, Scalar(255), 1, 8, hierarchy);

            //绘制轮廓的最小外接矩形
            RotatedRect rect = minAreaRect(selectpoint);
            Point2f P[4];
            rect.points(P);//外接矩形的四个顶点
            for (int j = 0; j <= 3; j++)
            {
                line(imageContours, P[j], P[(j + 1) % 4], Scalar(255), 2);
            }
            imshow("MinAreaRect", imageContours);
            waitKey(0);

     

    注意:

    (1)部分关键量解释

    contours;//向量内每个元素保存了一组由连续的Point点构成的点的集合的向量,每一组Point点集就是一个轮廓。
                       //有多少轮廓,向量contours就有多少元素
    hierarchy;//向量内每一个元素包含了4个int型变量,向量hiararchy内的元素和轮廓向量contours内的元素是一一对应的,向量的容量相同。每一个元素的4个int型变量——hierarchy[i][0] ~hierarchy[i][3],分别表示第i个轮廓的后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号。如果当前轮廓没有对应的后一个轮廓、前一个轮廓、父轮廓或内嵌轮廓的话,则hierarchy[i][0] ~hierarchy[i][3]的相应位被设置为默认值-1。

    findContours(edge, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_NONE, Point());
    //RETR_EXTERNAL,只检测最外围轮廓,包含在外围轮廓内的内围轮廓被忽略。
    //CHAIN_APPROX_NONE,保存物体边界上所有连续的轮廓点到contours向量中。

    (2)可能出现的问题

    一般情况下,我们都期望找到包括图像所有边缘的最小外接矩阵,但这种方法可能产生问题。如输入图像如下图:

    其会分成两组点簇:蓝圈部分与红圈部分。

    取最大的点簇可能取不完整我们需要的矩形边界,但可能外接矩阵没问题,如下图。但是点簇右下边缺失,不利于后续操作,所以不推荐使用这种方法。

       

     

    2.输入是一组点(x,y)

    测试代码:

            vector<Point> pointxy;
            vector<vector<Point>> aglcontours0;
            find_edge_coordinate(edge,pointxy);//提取边缘部分,将图像中边缘部分的点提取出来,并保存
            aglcontours0.push_back(pointxy);
            Mat imageContours = Mat::zeros(edge.size(), CV_8UC1);
            drawContours(imageContours, aglcontours0, 0, Scalar(255), 1, 8);

            RotatedRect rect = minAreaRect(pointxy);//查找最小外接矩形
            Point2f P[4];
            rect.points(P);//外接矩形的四个顶点
            for (int j = 0; j <= 3; j++)
            {
                line(imageContours, P[j], P[(j + 1) % 4], Scalar(128), 2);
            }
            imshow("MinAreaRect", imageContours);
            waitKey(0);

    输出显示:

    说明:不知道为啥中间部分也成了白色的。。。。。。

    展开全文
  • OpenCV找出最小外接矩形

    万次阅读 2017-10-22 14:54:38
    提取轮廓找出最小外接矩形

    惯例先放结果吧



    测试图片盗取自:  地址  (2333)


    其实就一行关键的代码:

    RotatedRect rect = minAreaRect(contours[i]);


    下面就是简单粗暴的代码啦~~


    #include<opencv2/opencv.hpp>
    using namespace std;
    using namespace cv;
    
    int main()
    {
    	Mat 原图 = imread("1.jpg");
    	imshow("原图", 原图);
    	Mat 灰度图,二值图;
    	cvtColor(原图, 二值图, CV_BGR2GRAY);
    	//blur(灰度图, 二值图, Size(5, 5));//模糊一下,可以不要
    	threshold(二值图, 二值图, 0, 255, CV_THRESH_OTSU);//自适应二值化
    	二值图 = 255 - 二值图;//颜色反转
    	//imshow("二值图", 二值图);
    
    	//寻找最外层轮廓  
    	vector<vector<Point>> contours;
    	vector<Vec4i> hierarchy;
    	findContours(二值图, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_NONE, Point());
    
    	Mat 画布 = Mat::zeros(二值图.size(), CV_8UC1); //最小外接矩形画布  
    	for (int i = 0; i<contours.size(); i++)
    	{
    		//绘制轮廓  
    		drawContours(画布, contours, i, Scalar(255), 1, 8, hierarchy);
    
    		//绘制轮廓的最小外结矩形  
    		RotatedRect rect = minAreaRect(contours[i]);
    		//rectangle(画布,rect.boundingRect(),Scalar(55));
    		Point2f P[4];
    
    		rect.points(P);
    		for (int j = 0; j <= 3; j++)
    		{
    			line(原图, P[j], P[(j + 1) % 4], Scalar(0,0,255), 1);
    			line(画布, P[j], P[(j + 1) % 4], Scalar(111), 2);
    		}
    
            /*
    		//绘制轮廓的最小外结圆  
    		Point2f center; float radius;
    		minEnclosingCircle(contours[i], center, radius);
    		circle(画布1, center, radius, Scalar(255), 2);
            */
    
    	}
    	//imshow("最小外接矩形", 画布);
    	imshow("标注出矩形", 原图);
    	waitKey(0);
    	return 0;
    }




    展开全文
  • 10、最小外接矩形及长宽的法liuqingjie2@http://www.doczj.com/doc/96e75a41a8956bec0975e327.html#include "cv.h"#include "highgui.h"#include#include#include "otsu.h"int main(int argc,char** argv){...
  • opencv-python 最小外接矩形

    千次阅读 2020-02-03 23:01:36
    opencv—python 最小外接矩形 (编程小白,如有问题还请各位大佬多指教) 所用函数: cv2.threshold() —— 阈值处理 cv2.findContours() —— 轮廓检测 cv2.boundingRect() —— 最大外接矩阵 cv2.rectangle() ——...
  • 使用python opencv返回点集cnt的最小外接矩形,所用函数为 cv2.minAreaRect(cnt) ,cnt是所要求最小外接矩形的点集数组或向量,这个点集不定个数。 举例说明:画一个任意四边形的最小外接矩形,其中 cnt 代表该...
  • opencv使用最小外接矩形比较方便,但是不能紧包图像。使用近似多边形的方法可以实现紧包图像边界。 因为使用分割模型去训练证件检测,检测出来后是mask,需要从mask中获取到四个顶点的坐标信息。 以下是整个流程,...
  • opencv-python最小外接矩形

    千次阅读 2021-05-06 18:18:02
    所用函数: ...cv2.minAreaRect —— 找到最小外接矩形(矩形具有一定的角度) cv2.boxPoints —— 外接矩形的坐标位置 cv2.drawContours(image, [box], 0, (0, 0, 255), 3) —— 根据点画出矩形 # -*- cod
  • 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...
  • 最近遇到一个需求,通过minAreaRect得到最小外接矩阵后,还需要判断该矩形中的文字是横向排列还是纵向排列。网上查找很多教程,他们对minAreaRect函数以及其返回值的解释与我在实际操作时的结果都不一样,不知道是...
  • #include<iostream>...opencv2/opencv.hpp> #include<string> using namespace std; using namespace cv; int main() {  Mat image(600, 600, CV_8UC3);  RNG& rng = theRNG...
  • 任务:给定这样一张图片图片中白色区域的外接矩形、最小外接矩形、拟合多边形以及外接圆 外接矩形 x, y, w, h = cv2.boundingRect(points) 输入:点集 返回值:左上角点坐标以及宽高 实现代码: import cv2 ...
  • openCV中,使用最小外接矩形来定位目标是一个很常用的功能。有时,我们需要把矩形的中心和方向展示出来,这时,可以使用cv2.arrowedLine()来实现这一目标。具体实现方法如下: 首先,我们需要使用cv2....
  • //printf("最小外接矩形的长为:%d,宽为:%d\n",chang,kuan); //画出Box cvPolyLine(dst, &pt, &npts, 1, 1, CV_RGB(255,0,0), 1); } cvNamedWindow("image5",1); cvShowImage("image5",dst); cvWaitKey(0);//注意...
  • 最小外接矩形

    2018-05-09 09:39:35
    利用opencv找图像中形状的最小外接矩形,进而可获得最小外接矩形的信息等

空空如也

空空如也

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

opencv求最小外接矩形