OPenCV版本:4.4

IDE:VS2017

功能描述

简述:在一个二进制图像里发现轮廓。

函数在二进制图像中使用Suzuki85算法获取轮廓。轮廓对形状分析和目标检测与识别是一个有用的工具,用法见OpenCV例子目录下的squares.cpp。

注意:自从opencv 3.2源图像不被函数修改。

参数描述

  • 参数 src 源图,一个8位单通道的图像,非零的像素都被当做1,零像素值保持原来的0值,图像还是被当做二进制,你可以使用 compare, inRange, threshold , adaptiveThreshold, Canny,和其他的去创建一个灰度图或彩色的二进制图像。如果模式等于RETR_CCOMP或RETR_FLOODFILL,输入可以是一个32位整型标签的图像(CV_32SC1)。
  • 参数 contours 检测到的轮廓,每个轮廓都被存为一个点的组合的vector(例如std::vector<std::vectorcv::Point >)
  • 参数 hierarchy 可选参数,输出向量(例如 std::vectorcv::Vec4i),包含了图像拓扑信息,他具有和轮廓数量一样多的元素,对contours[i]中的第i个contour ,在同一等级水平上的上一个轮廓和下一个轮廓的第一个子轮廓和父轮廓的元素 hierarchy[i][0] hierarchy[i][1] , hierarchy[i][2] , and hierarchy[i][3] 按顺序被设置成基于0的索引,如果轮廓i没有下一个、上一个、子轮廓或嵌套轮廓,相应的元素hierarchy[i]值将会是负值,
  • 参数 mode 轮廓获取模式,详见RetrievalModes
  • 参数 method 轮廓近似方法,详见ContourApproximationModes
  • 参数 offset 可选参数,每个轮廓点的偏移量。如果轮廓是从ROI图像中获取,并且他们是在整个图像上下文进行分析的,这个参数是有用的。

函数原型

CV_EXPORTS_W void findContours( InputArray image, OutputArrayOfArrays contours,OutputArray hierarchy, int mode,int method, Point offset = Point());
CV_EXPORTS void findContours( InputArray image, OutputArrayOfArrays contours,int mode, int method, Point offset = Point());

源码示例

#include <iostream>
#include <opencv2/opencv.hpp>
#include <stdio.h>
int main()
{cv::Mat image_gray = cv::imread("D:\\OpenCVtest\\images\\heart.jpg", cv::IMREAD_GRAYSCALE);cv::Mat image_binary;// 二值化cv::threshold(image_gray, image_binary, 150, 255, cv::THRESH_BINARY);std::vector< std::vector< cv::Point> > contours;cv::findContours(image_binary,contours,cv::noArray(),cv::RETR_LIST,cv::CHAIN_APPROX_SIMPLE);cv::Mat image_contours = cv::Mat(image_binary.rows, image_binary.cols, CV_8UC1, cv::Scalar::all(255));cv::drawContours(image_contours, contours, -1, cv::Scalar::all(0));    // 画轮廓cv::imshow("灰度图", image_gray);        // 灰度图cv::imshow("轮廓图", image_contours);    // 轮廓cv::waitKey(0);return 0;
}

运行结果:

把彩色图像转换为灰度图,红心变成了黑白的。

轮廓图

OpenCV图像发现轮廓函数findContours()的使用相关推荐

  1. 计算机视觉开源库OpenCV之查找轮廓函数cv2.findContours()介绍

    计算机视觉开源库OpenCV之查找轮廓函数cv2.findContours说明如下: 示例代码: #!/usr/bin/env python3import cv2image = cv2.imread( ...

  2. 计算机视觉开源库OpenCV之绘制轮廓函数cv2.drawContours()介绍

    计算机视觉开源库OpenCV之绘制轮廓函数cv2.drawContours(),用于轮廓的绘制或填充. cv2.drawContours(image, contours, contourIdx, co ...

  3. 【Python+OpenCV 图像透视变换 warpPerspective函数】

    Python+OpenCV 图像透视变换 warpPerspective函数 1.函数介绍 2.代码实例 3.实现效果 1.函数介绍 warpPerspective():对图像进行透视变换.简单来说, ...

  4. OpenCV图像的轮廓的匹配

    一个跟轮廓相关的最常用到的功能是匹配两个轮廓.如果有两个轮廓,如何比较它们;或者如何比较一个轮廓和另一个抽象模板. 矩 比较两个轮廓最简洁的方式是比较他们的轮廓矩.这里先简短介绍一个矩的含义.简单的说 ...

  5. OpenCV图像的轮廓

    查找轮廓 轮廓到底是什么?一个轮廓一般对应一系列的点,也就是图像中的一条曲线.表示的方法可能根据不同情况而有所不同.有多重方法可以表示曲线.在openCV中一般用序列来存储轮廓信息.序列中的每一个元素 ...

  6. opencv图像修补-inpaint函数

    图像修复技术原理:利用已被破坏的边缘,即边缘的颜色和结构,繁殖和混合到损坏的图像中,已达到图像修补的目的. 运用场合:在实际运用中,图像常常会被噪声腐蚀,这些噪声有可能是镜头上的灰尘.水滴,或者是旧图 ...

  7. matlab灰度图孔洞填充,OpenCV图像内轮廓填-孔洞填充

    //test #include "stdafx.h" #include "cxcore.h" #include "cv.h" #includ ...

  8. Opencv边缘检测、轮廓发现、绘制轮廓

    Opencv边缘检测.轮廓发现.绘制轮廓 提取图像轮廓的2个步骤 1. findContours函数找轮廓, 2. drawContours函数画轮廓 轮廓的查找--cv::findContours( ...

  9. 发现你的身形——OpenCV图像轮廓

    文章目录 写在最前 轮廓发现算法 边缘检测 写在最后 写在最前 我的意思不是说你长得很胖,emmmm,而是你的轮廓很大. --五星上将詹姆斯下士如是说 果然有图没图,理解是不一样的,这就体现了计算机视 ...

最新文章

  1. Journal of Genetics and Genomics科学编辑招聘启事
  2. 从未后悔认识你,只是不知如何面对分开的结局
  3. 用word发布CSDN文章
  4. virtualbox php mac,mac一体机通过Oracle VM VirtualBox装win8.1系统
  5. android @style/name,android style和attr的用法
  6. [转]netstat 输出内容详解,TCP链接握手对应state
  7. 东大OJ 2SAT 异或
  8. .net 遍历数组找重复值写入一个新数组_第二轮 Python 刷题笔记一:数组
  9. 歌词 —— 那些花儿
  10. box-sizing,你的宽高度计算对了吗?
  11. 操作系统 第二部分 进程管理(三)
  12. 大疆机器学习算法岗笔试
  13. 一文读懂一台计算机是如何把数据传送给另外一台计算机的
  14. Python 图像处理 OpenCV (12): Roberts 算子、 Prewitt 算子、 Sobel 算子和 Laplacian 算子边缘检测技术
  15. Matlab中滤波操作的相关函数
  16. 女神瓦萨比-小黑中国力鉴淘宝给力明星店
  17. 第10节_我的日记本开发手记(10)——使用自定义图标字体
  18. 马虎词汇教程6-10(转载)
  19. 20.EC实战 笔记本电脑的休眠唤醒是如何实现的
  20. bzip2: Data integrity error when decompressing--apt-get update

热门文章

  1. boost::mp11::mp_join相关用法的测试程序
  2. boost::hana::scan_right用法的测试程序
  3. boost::gil::static_transform用法的测试程序
  4. boost::geometry::strategy::distance::pythagoras用法的测试程序
  5. 拷贝boost::exception的测试程序
  6. boost::detail模块实现宏IS_SORTED的测试程序
  7. boost::contract模块实现customer and manager的测试程序
  8. Boost:reference wrapper参考包装的测试程序
  9. OpenCV添加图像轨迹轨迹条 Adding Images Trackbar的实例(附完整代码)
  10. C语言实现方差variance计算(附完整源码)