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方法分别求最小外接矩和圆:

<span style="font-size:18px;">#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;
}</span>

作图步骤:

1. 对原始图像均值滤波并二值化;

2. 求图像的最外层轮廓;

3.  使用minAreaRect方法求轮廓的最小外接矩形,转化求得矩形的四个顶点坐标,并绘制矩形;

4.  使用minEnclosingCircle方法求轮廓的最小外接圆,获取圆心和半径信息,并绘制圆;

原始图像:

最小外接矩:

最小外接圆:

最新文章

  1. JAVA发展史
  2. Material Design
  3. Codility NumberSolitaire Solution
  4. HDU-4057 Rescue the Rabbit(AC自动机+DP)
  5. PHP内核探索之变量(5)- session的基本原理
  6. 编程范式 epesode7,8 stack存放指针类型and heap,register
  7. VS2013 EMMET插件学习
  8. Oracle 基础 —SQL语句优化的途径
  9. WebGL on iOS8 最终等到了这一天
  10. lua中的require机制
  11. 在Kali Linux中下载工具Stegsolve
  12. Druid 数据库连接池
  13. [转] ROS2源码编译和安装
  14. c# 界面自适应大小
  15. 手写Spring框架学习笔记
  16. c++ 11和java 8都支持lambda表达式
  17. poj1611(并查集简单应用)
  18. mysql 的varchar类型小记
  19. IP层网络安全协议(IPSec)技术原理图解——转载图片
  20. C#根据URL生成签名

热门文章

  1. jQuery学习笔记之概念(1)
  2. electron 学习
  3. JavaOO小结二,及MySQL小结
  4. Having子句用法
  5. 微信小程序播放背景音乐
  6. python利用numpy存取文件
  7. eas之EAS手工打包及快速部署工具
  8. Python 3下使用Matplotlib工具画图,中文显示乱码的问题解决
  9. CentOS 7.2.1511编译安装Nginx1.10.1+MySQL5.7.15+PHP7.0.11
  10. Vue主要原理最简实现与逻辑梳理