当前位置: 首页 > 编程笔记 >

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

莫英卓
2023-03-14
本文向大家介绍Opencv绘制最小外接矩形、最小外接圆,包括了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方法求轮廓的最小外接圆,获取圆心和半径信息,并绘制圆;

原始图像:

最小外接矩:

最小外接圆:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍OpenCV实现最小外接正矩形,包括了OpenCV实现最小外接正矩形的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了OpenCV实现最小外接正矩形的具体代码,供大家参考,具体内容如下 原图: 二值化反色图: 最小正矩形图: 最小正矩形信息: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍Opencv实现最小外接矩形和圆,包括了Opencv实现最小外接矩形和圆的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Opencv实现最小外接矩形和圆的具体代码,供大家参考,具体内容如下 步骤:将一幅图像先转灰度,再canny边缘检测得到二值化边缘图像,再寻找轮廓,轮廓是由一系列点构成的,要想获得轮廓的最小外接矩形,首先需要得到轮廓的近似多边形,用道格拉斯-普克抽稀(

  • 我正在尝试从表中选择一行,其中: 具有最小UUID 未在其他表中引用 但是,当我试图实施第一个约束时,我遇到了问题。 下面是在整数上按预期工作的所有内容:首先,创建如下所示的表: 和 现在,我想选择中具有最低的行,它在中不显示为外键。我想选择中具有并且按预期工作的行: 但是,当我对UUID进行同样的尝试时,最终查询根本无法返回任何内容。请注意,我已经使用这篇文章的答案来定义一种查找最小UUID的方

  • 使用closePath()闭合图形 首先我们用上节课的方法绘制一个矩形。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UT

  • 可以使用包的相应方法在图像上绘制各种形状,如圆形,矩形,线条,椭圆,多段线,凸起,多段线,多段线。 可以使用类的方法在图像上绘制一个圆形。 以下是这种方法的语法 - 该方法接受以下参数 - mat - Mat对象,表示要在其上绘制圆的图像。 point - 代表圆中心的对象。 radius - 表示圆的半径的整型变量。 scalar - 表示圆的颜色的标量对象(BGR)。 thickness -

  • 我实现了c程序,可以找到矩阵的元素:行的最大元素,同时列的最小元素,或行的-min元素,同时列的最大元素。例如,我们有数据。包含以下内容的txt文件: 4 7 8 9 10 6 5 4 11 5 0 1 12 4 2 7 13- 其中4是n-矩阵大小(4x4),7和10是这些数字。 下面是代码: 问题:我想知道我的代码是不是“脏”代码?因为我总是渴望让一切变得如此困难,只要有可能让它变得容易。是否