OpenCV——绘制等高线

寻找等高线:

  • void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset=Point())

    void findContours(InputOutputArray image, OutputArrayOfArrays contours, int mode, int method, Point offset=Point())

    参数:
    image:8bits单通道图片,非零像素值认为是1。在提取等高线的时候会修改image。如果mode参数设置成CV_RETR_CCOMP或者CV_RETR_FLOODFILL,输入也可以是32bit的type位CV_32SC1的整型图片。
    contours:可以是vector>,检测到的等高线,每个等高线保存成点的向量vector < Point >
    hierarchy:可选的向量参数,包含图像拓扑信息。元素个数和contours个数一样多。
    mode:等高线搜索模式。可以取值

    • CV_RETR_EXTERNAL:只搜索最外层的等高线
    • CV_RETR_LIST:搜索所有的等高线,而且不建立层级关系
    • CV_RETR_CCOMP:所有所有的等高线,并把它们组织成两个层级,第一层级包好的是组件的外层边缘,第二层及包含的是洞的边缘
    • CV_RETR_TREE:搜索所有的轮廓线,并且组织成多个层级
      method:估计等高线的方法
    • CV_CHAIN_APPROX_NONE:保存等高线的所有点
    • CV_CHAIN_APPROX_SIMPLE:压缩水平、竖直和对角线方向上的段,只保留两端点

          offset:可选的参数,表示每个等高线点应该怎么平移。当等高线是从ROI提取的并且随后想在原图中分析的时候有用。

绘制等高线:

  • 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() )

    参数:
    image:目标图片
    contours:所有的等高线
    contourIdx:等高线的索引值,表示绘制哪个等高线;如果位负数,则绘制所有的
    color:等高线的颜色
    thickness:等高线的宽度,如果是非负数,绘制等高线的轮廓;如果是负数,填充等高线的内部
    lineType
    hierarchy:当只需要绘制一些轮廓线的时候会用到
    maxLevel:只有在参数hierarchy有效时,才会用到。如果是0,只有指定的等高线被绘制;如果是1,绘制指定等高线以及所有的nested等高线。

示例:

vector<vector> contours;
Mat phi_8UC1;
//Draw contour according to phi=0
phi.convertTo(phi_8UC1, CV_8UC1);
findContours(phi_8UC1, contours, CV_RETR_LIST, CV_CHAIN_APPROX_NONE);
drawContours(original_img, contours, 0, CV_RGB(255, 0, 0));

你可能感兴趣的:(OpenCV)