分享

OpenCV(C++版)轮廓(contour)检测

 mscdj 2014-12-17

findContours 和 drawContours 的例子:来自

#include "stdafx.h"
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main( int argc, char** argv )
{    Mat src;
    // the first command-line parameter must be a filename of the binary (black-n-white) image
    if( argc != 2 || !(src=imread(argv[1], 0)).data)
        return -1;

    Mat dst = Mat::zeros(src.rows, src.cols, CV_8UC3);

    src = src > 50;
    namedWindow( "Source", 1 );
    imshow( "Source", src );

    vector<vector<Point> > contours;
    vector<Vec4i> hierarchy;

    findContours( src, contours, hierarchy, CV_RETR_CCOMP , CV_CHAIN_APPROX_NONE );

    // iterate through all the top-level contours,draw each connected component with its own random color
    int idx = 0;
    for( ; idx >= 0; idx = hierarchy[idx][0] )
    {
        Scalar color( rand()&255, rand()&255, rand()&255 );
        drawContours( dst, contours, idx, color, CV_FILLED, 8, hierarchy );
    }

    namedWindow( "Components", 1 );
    imshow( "Components", dst );
    waitKey(0);

}

〉按轮廓线,提取图像中闭合区域:findContours,对应的C接口为cvFindContours。
> 加入canny边缘检测,可以得到另一组结果。
结果:
OpenCV(C++版)轮廓(contour)检测 - 钰之心 - 计算机视觉·图像处理
OpenCV(C++版)轮廓(contour)检测 - 钰之心 - 计算机视觉·图像处理
OpenCV(C++版)轮廓(contour)检测 - 钰之心 - 计算机视觉·图像处理 
OpenCV(C++版)轮廓(contour)检测 - 钰之心 - 计算机视觉·图像处理
 



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约