拿如下图做解释                                         //图片来自http://www.opencv.org.cn/forum.php?mod=viewthread&tid=2865714

这张图里面有多个几何图形,如何得到每一个多边形的中心点。我们需要以下几个函数实现

findContours( InputOutputArray image, OutputArrayOfArrays contours,OutputArray hierarchy, int mode,  int method, Point offset=Point());
Moments moments(InputArray array, bool binaryImage=false )
void drawContours(InputOutputArray image, InputArrayOfArrays contours, int contourIdx, const Scalar& color, int thickness=1, int lineType=8, InputArray hierarchy=noArray(), int maxLevel=INT_MAX, Point offset=Point() )

findContours可以寻找图像中的轮廓,而知道了轮廓再去找中心其实是个数学问题。

moments计算轮廓的特征矩,有了特征矩就可以计算中心。至于其中按照什么数学思想进行运算,请参考以下博文:

https://www.cnblogs.com/mikewolf2002/p/3427564.html

drawContours可以画出找得到轮廓。因为本篇关注中线点,这个函数我只是提到,大家有兴趣可以自行查阅:

http://www.opencv.org.cn/opencvdoc/2.3.2/html/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=drawcontours#void drawContours(InputOutputArray image, InputArrayOfArrays contours, int contourIdx, const Scalar& color, int thickness, int lineType, InputArray hierarchy, int maxLevel, Point offset)

接下来是实例代码:

int main()
{Mat matSrc = imread("qiqiaoban.jpg", 0);GaussianBlur(matSrc, matSrc, Size(5, 5), 0);vector<vector<Point> > contours;//contours的类型,双重的vectorvector<Vec4i> hierarchy;//Vec4i是指每一个vector元素中有四个int型数据。//阈值threshold(matSrc, matSrc, 60, 255, THRESH_BINARY);//寻找轮廓,这里注意,findContours的输入参数要求是二值图像,二值图像的来源大致有两种,第一种用threshold,第二种用cannyfindContours(matSrc.clone(), contours, hierarchy,CV_RETR_EXTERNAL, CHAIN_APPROX_SIMPLE, Point(0, 0));/// 计算矩vector<Moments> mu(contours.size());for (int i = 0; i < contours.size(); i++){mu[i] = moments(contours[i], false);}///  计算中心矩:vector<Point2f> mc(contours.size());for (int i = 0; i < contours.size(); i++){mc[i] = Point2f(mu[i].m10 / mu[i].m00, mu[i].m01 / mu[i].m00);}/// 绘制轮廓Mat drawing = Mat::zeros(matSrc.size(), CV_8UC1);for (int i = 0; i < contours.size(); i++){Scalar color = Scalar(255);drawContours(drawing, contours, i, color, 2, 8, hierarchy, 0, Point());circle(drawing, mc[i], 4, color, -1, 8, 0);}imshow("outImage",drawing);waitKey();return 0;}

效果如下:

Opencv中如何寻找连通域的几何中心相关推荐

  1. OpenCV中的图像处理3.9(六)轮廓线特征与属性

    目录 3.9 OpenCV中的轮廓线 3.9.1 轮廓线:入门 目标 什么是轮廓线? 如何绘制轮廓线? 轮廓线逼近法 3.9.2 轮廓线的特征 1. 矩 2. 轮廓线面积 3. 轮廓线周长 4. 轮廓 ...

  2. OpenCV中的图像处理中

    图像金字塔 一般情况下,我们要处理是一副具有固定分辨率的图像.但是有些情况下,我们需要对同一图像的不同分辨率的子图像进行处理.比如,我们要在一幅图像中查找某个目标,比如脸,我们不知道目标在图像中的尺寸 ...

  3. OpenCV学习笔记(12)——OpenCV中的轮廓

    什么是轮廓 找轮廓.绘制轮廓等 1.什么是轮廓 轮廓可看做将连续的点(连着边界)连在一起的曲线,具有相同的颜色和灰度.轮廓在形态分析和物体的检测和识别中很有用. 为了更加准确,要使用二值化图像.在寻找 ...

  4. OpenCV中的光流及视频特征点追踪

    OpenCV中的光流及视频特征点追踪 1. 效果图 2. 原理 2.1 什么是光流?光流追踪的前提.原理 2.2 光流的应用 2.3 光流的2种方法 3. 源码 3.2 稀疏光流追踪 3.2 优化版稀 ...

  5. OpenCV中的SURF(Speeded-Up Robust Features 加速鲁棒特征)

    OpenCV中的SURF(加速健壮功能) 1. 效果图 2. 原理 2.1 为什么SURF比SIFT快? 2.3 怎样获取SIFT与SURF? 3. 源码 参考 上一篇博客介绍了用于关键点检测和描述的 ...

  6. Python,OpenCV中的K近邻(knn K-Nearest Neighbor)及改进版的K近邻

    Python,OpenCV中的K近邻(knn K-Nearest Neighbor)及改进版的K近邻 1. 效果图 2. 源码 参考 这篇博客将介绍将K-最近邻 (KNN K-Nearest Neig ...

  7. OpenCV中的特征匹配+单应性以查找对象

    OpenCV中的特征匹配+单应性以查找对象 1. 效果图 2. 源码 参考 这篇博客将混合calib3d模块中的特征匹配和单应性,在复杂图像中查找已知对象. 1. 效果图 特征匹配 & 单应性 ...

  8. OpenCV中的特征匹配(Feature Matching)

    OpenCV中的特征匹配(Feature Matching) 1. 效果图 2. 原理 3. 源码 3.1 SIFT关键点检测+Knn近邻匹配 3.2 ORB关键点检测+蛮力特征匹配 3.3 SIFT ...

  9. OpenCV中的快速特征检测——FAST(Features from Accelerated Segment Test)

    OpenCV中的快速特征检测--FAST(Features from Accelerated Segment Test) 1. 效果图 2. 源码 参考 OpenCV中的尺度不变特征变换(SIFT S ...

最新文章

  1. UML中类之间的几种关系
  2. 组合CPU和DRAM
  3. php 远程图片合拼,PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】...
  4. mysql 刘道成视频教程 第4-8课 --- 数据类型
  5. 有感于“用界面线程去更新界面元素”
  6. Redis(二)原理以及主从复制的实现
  7. 在C#中将字符串转换为字节数组
  8. maven项目转换为web项目
  9. 怎么自己制作证件照?如何在线制作证件照电子版?
  10. 计算机3大总线名词解释,计算机名词解释-- 总线.doc
  11. windowsxp最新版本_9102 年还用 Windows XP 是怎样的体验?
  12. 编译安装httpd服务
  13. javaweb图片加载不出来问题的解决方法
  14. 基于Stacey模型的变革小招式:强有力的提议
  15. 怎么用计算机扫描,怎么用电脑扫描文件
  16. Python_从零开始学习_(27) 字符串
  17. addon游戏_addon_game_mode游戏基本情况设置
  18. 三分钟了解多模光纤和单模光纤的区别-ielab
  19. Android-S ANR
  20. C#创建Windows窗体应用程序实例1【姓名输入】

热门文章

  1. 敬伟PS教程:新版PS变化篇D
  2. 超简单案例:分层卡方检验怎么做?
  3. CameraX获取摄像头YUV数据
  4. 黑龙江高中计算机结业水平测试,黑龙江省普通高中学业水平考试
  5. SD nand 与 SD卡的SPI模式驱动
  6. 纯代码RelativeLayout实现右上角布局
  7. 88NV1120主控,镁光颗粒无法格式化、掉盘、开卡失败的偶然解决(修复)方法
  8. 3款BootStrap可视化工具
  9. 学计算机应用好还是学计算机平面设计好,平面设计与计算机应用哪个好?
  10. 【blender建模功能】01 挤出类工具