zoukankan      html  css  js  c++  java
  • 查找并绘制轮廓 opencv

    findContours():
      第二个参数为一个检测到的轮廓,函数调用后的运算结果都放在这里,每个轮廓存储为1个点向量,用point类型的vector表示。
      第三个参数表示轮廓数量,包含了许多元素。每个轮廓对应4个hierarchy元素hierarchy[i][0]——hierarchy[i][3],分别表示后一个轮廓,前一个轮廓,父轮廓,内嵌轮廓的索引编号.
    drawContours()函数:
      第二个参数:所有的输入轮廓,用point类型的vector表示。
      第三个参数:轮廓绘制的指示变量
      第四个参数:轮廓的颜色
      第五个参数:轮廓线条的粗细度。如为FILLED,便会绘制在轮廓内部。
      第六个参数:线条的类型。
      第七个参数:可选的层次结构信息。

     1 #include<opencv2/opencv.hpp>
     2 using namespace std;
     3 using namespace cv;
     4 
     5 int main()
     6 {
     7     Mat src = imread("D:/meinv.jpg",0);
     8     imshow("原图", src);
     9 
    10     Mat dstImage = Mat::zeros(src.rows, src.cols, CV_8UC3);
    11 
    12     src = src > 119;
    13     imshow("取阈值化后的原始图", src);
    14 
    15     vector<vector<Point>>contours;
    16     vector<Vec4i>hierarchy;
    17 
    18     findContours(src, contours, hierarchy, CV_RETR_CCOMP, CHAIN_APPROX_SIMPLE);
    19 
    20     int index = 0;
    21     for (; index >= 0; index = hierarchy[index][0])
    22     {
    23         Scalar color(rand() & 255, rand() & 255, rand() & 255);
    24         drawContours(dstImage, contours, index, color, FILLED, 8, hierarchy);
    25     }
    26     imshow("轮廓图", dstImage);
    27     waitKey(0);
    28     return 0;
    29 
    30 }

    取阈值化后的图:

    查找并绘制的效果图:

  • 相关阅读:
    Linux查看程序端口占用情况
    jQuery冒泡事件阻止
    jQuery中.bind() .live() .delegate() .on()的区别
    Java四种线程池的使用
    JSON数据解析
    判断访问浏览器客户端类型(pc,mac,ipad,iphone,android)
    JAVA单线程和多线程的实现方式
    mysql利用st_distance函数查询附近的点的功能
    Redis缓存数据库常见操作
    JAVA获取CLASSPATH路径
  • 原文地址:https://www.cnblogs.com/carlber/p/9710082.html
Copyright © 2011-2022 走看看