精华内容
下载资源
问答
  • OpenCV最小外接矩形

    千次阅读 2014-09-03 20:18:44
    cvMinAreaRect2(contour,storage)最小外接矩形 #include "stdafx.h" #include "cv.h" #include "highgui.h" #include "cxcore.h" #include "math.h" int main(int argc, char* argv[]) { ...

    cvMinAreaRect2(contour,storage)最小外接矩形

    #include "stdafx.h"
    
    #include "cv.h"
    
    #include "highgui.h"
    
    #include "cxcore.h"
    
    #include "math.h"
    
    int main(int argc, char* argv[])
    
    {    
    
     IplImage *src; 
    
     IplImage *dst;
    
     CvMemStorage* storage=cvCreateMemStorage(0); 
    
     CvSeq* contour=0; 
    
      
    
     src=cvLoadImage("I:\\test.jpg",0);
    
     cvNamedWindow("image0",1);
    
     cvShowImage("image0",src);
    
     int   hei=src->height;
    
     int wid=src->width; 
    
     uchar *data;
    
     data=(uchar*)src->imageData;
    
     int widstep=src->widthStep;
    
     int channel=src->nChannels;
    
      dst=cvCreateImage(cvSize(wid,hei),IPL_DEPTH_8U,3);
    
     for (int i=0;i<hei;i++)
    
     {
    
         for(int j=0;j<wid;j++)
    
         {
    
            if (data[i*widstep+j*channel]>120)
    
            {
    
                data[i*widstep+j*channel]=0;
    
            }
    
            else
    
            {
    
                data[i*widstep+j*channel]=255;
    
            }
    
         }
    
     }
    
      cvNamedWindow("image",0); 
    
      cvShowImage("image",src);  
    
     printf("图像的高为:%d,宽为:%d\n\n",hei,wid); 
    
     cvCvtColor(src, dst, CV_GRAY2BGR);;
    
    cvFindContours(src,storage,&contour,sizeof(CvContour),CV_RETR_CCOMP,CV_CHAIN_APPROX_SIMPLE); 
    
     for(;contour!=0;contour=contour->h_next) 
    
     { 
    
    CvBox2D rect=cvMinAreaRect2(contour,storage); 
    
    CvPoint2D32f rect_pts0[4]; 
    
    cvBoxPoints(rect, rect_pts0); 
    
    int npts = 4,k=0; 
    
    int aaa=0,bbb=0; 
    
    CvPoint rect_pts[4], *pt = rect_pts; 
    
    printf("连通区域最小外接矩形顶点坐标分别为:\n"); 
    
    for (int i=0; i<4; i++) 
    
    { 
    
     rect_pts[i]= cvPointFrom32f(rect_pts0[i]); 
    
      printf("%d %d\n",rect_pts[i].x,rect_pts[i].y); 
    
     aaa=(int)sqrt((pow((rect_pts[0].x-rect_pts[1].x),2)+pow((rect_pts[0].y
    
    -rect_pts[1].y),2))); 
    
     bbb=(int)sqrt((pow((rect_pts[0].x-rect_pts[3].x),2)+pow((rect_pts[0].
    
    y-rect_pts[3].y),2))); 
    
       if(aaa<bbb) 
    
        { 
    
         k=aaa; 
    
         aaa=bbb; 
    
         bbb=k; 
    
        } 
    
    } 
    
    printf("最小外接矩形的长为:%d宽为:%d。\n\n",aaa,bbb); 
    
    cvPolyLine(dst, &pt, &npts, 1, 1, CV_RGB(255,0,0), 1); 
    
    } 
    
     cvNamedWindow("image5",1); 
    
     cvShowImage("image5",dst); 
    
      cvWaitKey(0); 
    
    cvDestroyWindow("image");  
    
    cvDestroyWindow("image5"); 
    
    cvReleaseImage(&src);    
    
      return 0; 
    
    }
    
    

     

    原图:

     

    二值黑白颠倒图:

    结果图:

    外接矩形信息:

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

    2020-05-21 10:21:57
    import cv2 import numpy as np img1 = cv2.imread(r'D:\test\pigs\20200518132334816.jpg.jpg',0) _,thresh = cv2.threshold(img1,200,255,0) image,contours = cv2.findContours(thresh,2,1) ...
    import cv2
    import numpy as np
    img1 = cv2.imread(r'D:\test\pigs\20200518132334816.jpg.jpg',0)
    _,thresh = cv2.threshold(img1,200,255,0)
    image,contours = cv2.findContours(thresh,2,1)
    area = 0
    for c in image:
        rect = cv2.minAreaRect(c)
        box = np.int0(cv2.boxPoints(rect))
        y_max = np.max(box[:,1])
        x_max = np.max(box[:,0])
        y_min = np.min(box[:, 1])
        x_min = np.min(box[:, 0])
        if (y_max - y_min) * (x_max - x_min) > area:
            area = (y_max - y_min) * (x_max - x_min)
            bbox = box
            yy_max = y_max
            xx_max = x_max
            yy_min = y_min
            xx_min = x_min
    print(bbox)
    cv2.drawContours(img1,[bbox],0,(100,100,100),4)
    cv2.imshow('a',img1)
    cv2.waitKey(0)
    mport cv2
    import numpy as np
    from math import *
    import os
    for dir in os.listdir(r'D:\tests\paper'):
        img1 = cv2.imread(os.path.join(r'D:\tests\paper',dir),0)
        _,thresh = cv2.threshold(img1,200,255,0)
        image,contours = cv2.findContours(thresh,2,1)
        area = 0
        for c in image:
            rect = cv2.minAreaRect(c)
            box = np.int0(cv2.boxPoints(rect))
            y_max = np.max(box[:,1])
            x_max = np.max(box[:,0])
            y_min = np.min(box[:, 1])
            x_min = np.min(box[:, 0])
            if (y_max - y_min) * (x_max - x_min) > area:
                area = (y_max - y_min) * (x_max - x_min)
                bbox = box
                yy_max = y_max
                xx_max = x_max
                yy_min = y_min
                xx_min = x_min
        flag = 0#0代表不是最标准的长方形
        if bbox[0][0] == bbox[1][0] or bbox[0][0] == bbox[2][0] or bbox[0][0] == bbox[3][0]:
            flag = 1#表示是横屏竖直
        if flag != 1:
            x1y1 = bbox[bbox[:,0] == xx_min][0]
            x2y2 = bbox[bbox[:,1] == yy_min][0]
            x3y3 = bbox[bbox[:,0] == xx_max][0]
            x4y4 = bbox[bbox[:,1] == yy_max][0]
            a = x4y4[1] - x1y1[1]
            b = x4y4[0] - x1y1[0]
            c = x3y3[0] - x4y4[0]
            d = x4y4[1] - x3y3[1]
            w = sqrt(a**2 + b**2) if sqrt(a**2 + b**2) < sqrt(c**2 + d**2) else sqrt(c**2 + d**2)
            h = sqrt(a**2 + b**2) if sqrt(a**2 + b**2) > sqrt(c**2 + d**2) else sqrt(c**2 + d**2)
            print(w/h)
        else:
            w = (xx_max - xx_min) if (xx_max - xx_min) < (yy_max - yy_min) else (yy_max - yy_min)
            h = (xx_max - xx_min) if (xx_max - xx_min) > (yy_max - yy_min) else (yy_max - yy_min)
            print(w/h)

     

    展开全文
  • 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 类矩形...

    1.    RotatedRect minRect  = minAreaRect(contours[i])     

         (1)输入点集,如由findContours(image, contours, hiera, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE)查找得到的轮廓点集contours(二维点集合)

          (2)输出:RotatedRect 类矩形 主要成员包括:

                 1.中心点坐标center.x,center.y,

                 2. 角度angle ;                                     3.   宽高:size.width, size.height ,

                 4. 面积:size.area()                   

                 5. 四个顶点坐标 Point2f P[4];            minRect.points(P), 绘图

             其中, opencv 坐标系中 原点在图像左上角,逆时针旋转角度为负值 , minAreaRect的角度是水平轴逆时针旋转,与碰到的

    第一条边的夹角,且 opencv会默认此边长为width ,故angle取值必为负值。

    minRect = minAreaRect(contours[i]);
    Point2f P[4];           
    minRect.points(P)
    for(int j=0; j<4; j++)       
     {
          line(dstImg, p[j], p[(j+1)%4], Scalar(0, 0, 255), 2, 8); //绘制最小外接矩形每条边    
             
     }

     

    展开全文
  • 金字塔识别,opencv最小外接矩形 //#include "stdafx.h" #include "pch.h" #include <stdio.h> #include <stdlib.h> #include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp&...

    金字塔识别,opencv最小外接矩形

    
    //#include "stdafx.h"
    #include "pch.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <opencv2/opencv.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/types_c.h>
    #include <opencv2/features2d/features2d.hpp>
    #include <opencv2/features2d.hpp>
    #include <opencv2/core.hpp>
    #include <opencv2/objdetect.hpp>
    #include <iostream>
    
    using namespace cv;
    using namespace std;
    
    //函数drawing识别轮廓,然后绘制最小外接矩形
    Mat drawing(Mat ima, Mat gray) {
    
    
    	double total_area = 13.86*13.86;//所加工的金字塔总面积
    	double pixel_area = total_area / 948675;//在当前摄影条件下,平均每个像素面积
    	int blockSize = 105;//邻域范围(2-40:95,-35)(50:95,-20)(60:95,-5)(70-80:385,-5)
    	int constValue = -15;//补偿值
    	cv::Mat local; //局部二值化图像local
    	cv::adaptiveThreshold(gray, local, 255, CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY, blockSize, constValue);
    
    	//imshow("global", global);
    	//imshow("local", local);
    	int rows = local.rows; //获取图像像素行
    	int cols = local.cols;    //获取图像像素列
    
    	vector<vector<Point>> contours;  // 轮廓容器
    	//vector<vector<Point>> contours1;
    	Rect centerRect(rows / 2 - 5, cols / 2 - 5, 10, 10); //定义中心矩阵
    
    	vector<Vec4i> hierarcy;
    	findContours(local, contours, hierarcy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);//local
    	vector<Rect> boundRect(contours.size());  //定义外接矩形集合
    	vector<RotatedRect> box(contours.size()); //定义最小外接矩形集合
       // vector<Point> cen;  //中心点集合
    	Point2f rect[4];
    	//Point cen
    	for (int i = 0; i < contours.size(); i++)
    	{
    		box[i] = minAreaRect(Mat(contours[i]));  //计算每个轮廓最小外接矩形2         boundRect[i] = boundingRect(Mat(contours[i]));
    		double area = (box[i].size.width)* (box[i].size.height);//计算面积
    		if (area > 1)
    		{
    			//cout << "矩形面积为: " << area << endl;
    			//判断外接矩形的中心点是否为图片的中心
    			if (box[i].center.x > centerRect.x && box[i].center.y > centerRect.y &&  box[i].center.y < centerRect.y + centerRect.height &&box[i].center.x < centerRect.x + centerRect.width)
    
    			{
    
    				circle(ima, Point(box[i].center.x, box[i].center.y), 2, Scalar(0, 255, 0), 1, 8);  //绘制最小外接矩形的中心点
    				cout << "矩形总像素为: " << area << "像素" << endl; //area 为识别后的外接矩形总像素
    				cout << "矩形总面积为: " << area * pixel_area << "mm2" << endl;
    				box[i].points(rect);  //把最小外接矩形四个端点复制给rect数组
    				//double area = (box[i].size.width)* (box[i].size.height);//计算面积
    				//cout << "矩形面积为: " << area << endl;
    				rectangle(ima, 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);
    				//double recArea = contourArea(box[i],false);
    				for (int j = 0; j < 4; j++)
    				{
    					line(ima, rect[j], rect[(j + 1) % 4], Scalar(0, 0, 255), 1, 8);  //绘制最小外接矩形每条边
    				}
    			}
    		}
    	}
    
    		return ima;
    }
    
    
    int main(int argc, char** argv)
    {
    	//cv::Mat image = cv::imread("H://图片//0.90.jpg");//载入图像
    	//cv::Mat imageGray;
    	//cvtColor(image, imageGray, COLOR_BGR2GRAY); //转换为灰度图像
    	//IplImage* img = cvLoadImage("E://image//1.png");
    	/*if (imageGray.empty())
    	{
    		std::cout << "read image failure" << std::endl;
    		return -1;
    	}*/
    
    	/*RNG rng((unsigned)time(NULL)); //生成随机数
    		Mat Canny_output;
    		vector<vector<Point>> contours; //边缘矢量
    		vector<Vec4i> hierarchy;   //形状因子
    		Canny(local, Canny_output, 200, 500, 3);  //边缘检测
    
    		imshow("canny", Canny_output);
    
    		findContours(Canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0)); //轮廓提取
    		Mat drawing = Mat::zeros(Canny_output.size(), CV_8UC3); //新建一样大小的图像
    		for (int i = 0; i < contours.size();i++)   //每个新的边缘赋RBG随机数
    		{
    			Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
    			drawContours(drawing, contours, i, color, 2, 8, hierarchy, 0, Point()); //画出轮廓
    		}
    		imshow("contours", drawing);*/
    
    
    		//	Mat result;
    		//	Canny(image, result, 50, 150, 3);
    		//	//cv::imshow("localThreshold", local);
    			//imshow("jieguo", result);
    
    
    		//使用不同的二值化方法,再进行判断
    
    			// 全局二值化
    
    	string pattern = "H://图片//cut//(5.5)//*.jpg"; //存放图片的路径
    	//cout << pattern << endl;
    	vector<Mat> images; //图片Mat类合集
    	// 必须cv的String
    	vector<String> fn;
    	glob(pattern, fn, false);
    	size_t count = fn.size();
    	cout << count << endl;
    	//double total_area = 13.86*13.86;//所加工的金字塔总面积
    	//double pixel_area = total_area / 948675;//在当前摄影条件下,平均每个像素面积
    	char filename[100];
    	Mat imageGray;
    
    	for (int i = 0; i < count; i++)
    	{
    		cout << i << endl;
    		images.push_back(imread(fn[i])); //push_back为在数据后面添加一行矩阵
    		//int width = images[i].rows;
    		//int height = images[i].cols;
    		//int total = width * height;
    		//cout << "图片" << i << "总像素为" << total << endl;
    		//Mat imageGray;
    		cvtColor(images[i], imageGray, COLOR_BGR2GRAY); //转换为灰度图像
    
    
    		/*int th = 100;
    		cv::Mat global;//全局二值化图像global
    		cv::threshold(imageGray, global, th, 255, CV_THRESH_BINARY);*/
    
    
    		// 局部自适应阈值二值化
    		/*
    		int blockSize = 95;//邻域范围(2-40:95,-35)(50:95,-20)(60:95,-5)(70-80:385,-5)
    		int constValue = -5;//补偿值
    		cv::Mat local; //局部二值化图像local
    		cv::adaptiveThreshold(imageGray, local, 255, CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY, blockSize, constValue);
    
    		//imshow("global", global);
    		imshow("local", local);
    
    
    
    
    		int rows = local.rows; //获取图像像素行
    		int cols = local.cols;    //获取图像像素列
    
    		vector<vector<Point>> contours;  // 轮廓容器
    		//vector<vector<Point>> contours1;
    		Rect centerRect(rows / 2 -5 , cols / 2 - 5, 10, 10); //定义中心矩阵
    
    		vector<Vec4i> hierarcy;
    		findContours(local, contours, hierarcy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);//local
    		vector<Rect> boundRect(contours.size());  //定义外接矩形集合
    		vector<RotatedRect> box(contours.size()); //定义最小外接矩形集合
    	   // vector<Point> cen;  //中心点集合
    		Point2f rect[4];
    		//Point cen
    		for (int i = 0; i < contours.size(); i++) 
    		{
    			box[i] = minAreaRect(Mat(contours[i]));  //计算每个轮廓最小外接矩形2         boundRect[i] = boundingRect(Mat(contours[i]));
    			double area = (box[i].size.width)* (box[i].size.height);//计算面积
    			if (area > 1)
    			{
    				//cout << "矩形面积为: " << area << endl;
    				//判断外接矩形的中心点是否为图片的中心
    				if (box[i].center.x > centerRect.x && box[i].center.y > centerRect.y &&  box[i].center.y < centerRect.y + centerRect.height &&box[i].center.x < centerRect.x + centerRect.width)
    
    				{
    
    					circle(images[i], Point(box[i].center.x, box[i].center.y), 2, Scalar(0, 255, 0), -1, 8);  //绘制最小外接矩形的中心点
    					cout << "矩形总像素为: " << area <<"像素"<< endl; //area 为识别后的外接矩形总像素
    					cout << "矩形总面积为: " << area*pixel_area <<"mm2"<< endl;
    					box[i].points(rect);  //把最小外接矩形四个端点复制给rect数组
    					//double area = (box[i].size.width)* (box[i].size.height);//计算面积
    					//cout << "矩形面积为: " << area << endl;
    					rectangle(images[i], 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);
    					//double recArea = contourArea(box[i],false);
    					for (int j = 0; j < 4; j++)
    					{
    						line(images[i], rect[j], rect[(j + 1) % 4], Scalar(0, 0, 255), 2, 8);  //绘制最小外接矩形每条边
    					}
    				}
    			}
    		}*/
    		images[i] = drawing(images[i], imageGray);
    
    		imshow("dst", images[i]);
    		sprintf_s(filename, "H://图片//result//%u.jpg", i+1);//赋予文件名
    		imwrite(filename, images[i]);//保存图片
    
    	}
    
    
    
    	/*	if (local.at<uchar>((local.rows) / 2, (local.cols) / 2)  = 0 && global.at<uchar>((local.rows) / 2, (local.cols) / 2)  > 0)
    
    			//cv::imwrite("global.jpg", global);
    			//cv::imwrite("local.jpg", local)
    		{
    
    			int global_whiteNum = 0;
    			int global_blackNum = 0;
    			int rows = global.rows;
    			int cols = global.cols;
    			for (int j = 0; j < rows; j++)//遍历二值图像
    			{
    				for (int i = 0; i < cols; i++)
    				{
    					if (global.at<uchar>(j, i) > 0) //计算黑白像素点总个数
    					{
    						global_whiteNum++;
    					}
    					else global_blackNum++;
    				}
    			}
    			imshow("image", image);
    			imshow("Gray", imageGray);
    			cv::imshow("globalThreshold", global);
    			//cv::imshow("localThreshold", local);
    			cout << "global白色像素点一共有:" << global_whiteNum << endl;
    			cout << "global黑色像素点一共有:" << global_blackNum << endl;
    
    
    
    
    		}
    
    		else {
    
    			int local_blackNum = 0;
    			int local_whiteNum = 0;
    			int rows = local.rows;
    			int cols = local.cols;
    			for (int j = 0; j < rows; j++)
    			{
    				for (int i = 0; i < cols; i++)
    				{
    					if (local.at<uchar>(j, i) > 0)
    					{
    						local_whiteNum++;
    					}
    					else local_blackNum++;
    				}
    			}
    
    			imshow("image", image);
    			imshow("Gray", imageGray);
    			//cv::imshow("globalThreshold", global);
    			cv::imshow("localThreshold", local);
    			cout << "local白色像素点一共有:" << local_whiteNum << endl;
    			cout << "local黑色像素点一共有:" << local_blackNum << endl;
    		}
    
    		*/
    	cv::waitKey(0);
    
    
    	return 0;
    }
    
    // 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
    // 调试程序: F5 或调试 >“开始调试”菜单
    
    // 入门提示: 
    //   1. 使用解决方案资源管理器窗口添加/管理文件
    //   2. 使用团队资源管理器窗口连接到源代码管理
    //   3. 使用输出窗口查看生成输出和其他消息
    //   4. 使用错误列表窗口查看错误
    //   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
    //   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
    
    展开全文
  • Opencv 最小外接矩形合并拼接

    千次阅读 2018-07-05 14:05:00
    前一篇画出了最小外接矩形,但是有时候画出来的矩形由于中间像素干扰或者是其他原因矩形框并不是真正想要的 如图1是一个信号的雨图,被矩形框分割成了多个小框: 需要合并矩形框达到的效果: 主要思想: ...
  • 主要为大家详细介绍了Opencv绘制最小外接矩形、最小外接圆的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • python opencv minAreaRect 生成最小外接矩形

    万次阅读 多人点赞 2017-08-03 11:05:33
    使用python opencv返回点集cnt的最小外接矩形,所用函数为 cv2.minAreaRect(cnt) ,cnt是点集数组或向量(里面存放的是点的坐标),并且这个点集中的元素不定个数。 2、举例说明: 画一个任意四边形(任意多边形都...
  • 主要为大家详细介绍了Opencv实现最小外接矩形和圆,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 使用opencv画出图形的最小外接矩形与最小外接圆,首先求出图形的轮廓,设有滚动条可以选择最佳阈值,然后画出图形的最小外接圆与最小外接矩形,算法的效果很好!
  • opencv最小外接矩形2 的算法

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

    千次阅读 2014-09-03 20:26:16
    最小外接矩形cvBoundingRect(contour,1) #include "stdafx.h" #include "cv.h" #include "highgui.h" #include "cxcore.h" #include "math.h" #include int main(int argc, char* argv[]) {   IplImage *src
  • 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();...
  • 主要介绍了python opencv minAreaRect 生成最小外接矩形的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 任务:给定这样一张图片求图片中白色区域的外接矩形、最小外接矩形、拟合多边形以及外接圆 外接矩形 x, y, w, h = cv2.boundingRect(points) 输入:点集 返回值:左上角点坐标以及宽高 实现代码: import cv2 ...
  • OpenCV找出最小外接矩形

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

    千次阅读 2020-02-03 23:01:36
    opencv—python 最小外接矩形 (编程小白,如有问题还请各位大佬多指教) 所用函数: cv2.threshold() —— 阈值处理 cv2.findContours() —— 轮廓检测 cv2.boundingRect() —— 最大外接矩阵 cv2.rectangle() ——...
  • Opencv绘制最小外接矩形、最小外接圆   Opencv中求点集的最小外结矩使用方法minAreaRect,求点集的最小外接圆使用方法minEnclosingCircle。 minAreaRect方法原型: RotatedRect minAreaRect( InputArray ...
  • opencv使用最小外接矩形比较方便,但是不能紧包图像。使用近似多边形的方法可以实现紧包图像边界。 因为使用分割模型去训练证件检测,检测出来后是mask,需要从mask中获取到四个顶点的坐标信息。 以下是整个流程,...
  • opencv外接矩形方法总结

    千次阅读 2016-01-26 16:41:58
    1、求轮廓的最小外接矩形;2求直接外接矩形 而且在测试中发现opencv的寻找轮廓函数cvFindContours中查找的参数类型与结果有很大关系:   mode CV_RETR_EXTERNAL:只检索最外面的轮廓; CV_RETR_LIST:检索...
  • OpenCV中minAreaRect()最小外接矩形详解

    万次阅读 多人点赞 2019-06-17 09:36:12
    该函数计算并返回指定点集的最小区域边界斜...返回包覆输入信息的最小斜矩形,是一个Box2D结构rect:(最小外接矩形的中心(x,y),(宽度,高度),旋转角度),但是要绘制这个矩形,我们需要矩形的4个顶点坐标b...
  • Opencv minAreaRect 生成最小外接矩形

    千次阅读 2019-04-09 18:02:36
    使用opencv返回点集cnt的最小外接矩形,所用函数为minAreaRect(cnt) ,cnt是所要求最小外接矩形的点集数组或向量,这个点集不定个数。 这个矩形是可以有偏转角度的,可以与图像的边界不平行。 调用形式:...

空空如也

空空如也

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

opencv最小外接矩形