zoukankan      html  css  js  c++  java
  • OpenCv cvFindContours 查询轮廓并返回轮廓数量

    Hai

    cvFindContours(binaryim, contourStorage, &contourSeq, sizeof(CvContour),CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint(0, 0));

    &contourSeq是用于储存轮廓的序列

    contourSeq->total  所表示的是contourSeq 当前指针所指向轮廓 所包含像素点的数目而非轮廓总数

    采用如下放下计数轮廓数量:

    for(;contourSeq!=0;contourSeq=contourSeq->h_next)
    {
    contourcount++;
    }
    printf("contour count is %d",contourcount);

    可直接运行代码如下:

     1 #include "cv.h"
     2 #include "highgui.h"
     3 #include <stdio.h>
     4 #include <math.h>
     5 #include <iostream>
     6 #include <ctime>
     7 using namespace cv;
     8 CvSeq *contourSeq = NULL;
     9 
    10 IplImage* ImageThreshold(IplImage* src)
    11 {
    12     IplImage *gray,*binaryim;
    13     int height,width;
    14     gray=cvCreateImage(cvGetSize(src),src->depth,1);
    15     cvCvtColor(src,gray,CV_BGR2GRAY);
    16     height=gray->height;
    17     width=gray->width;
    18     printf("The canvas'width is :%d,  height is :%d
    
    ",width,height);
    19 
    20     binaryim=cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
    21     cvThreshold(gray,binaryim,128,255,CV_THRESH_BINARY_INV);
    22     return binaryim;
    23 
    24 }
    25 
    26 IplImage* printlunkuo(IplImage *binaryim)
    27 {
    28     CvMemStorage *contourStorage=cvCreateMemStorage();
    29     cvFindContours(binaryim, contourStorage, &contourSeq, sizeof(CvContour),CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint(0, 0)); 
    30     
    31     IplImage *pOutlineImage = cvCreateImage(cvGetSize(binaryim), IPL_DEPTH_8U, 3);    
    32     int nLevels = 5;
    33     cvRectangle(pOutlineImage,cvPoint(0,0),cvPoint(pOutlineImage->height,pOutlineImage->width),CV_RGB(0,0,0),CV_FILLED);
    34     cvDrawContours(pOutlineImage, contourSeq, CV_RGB(255,0,0), CV_RGB(0,255,0), nLevels,0.5); 
    35 
    36     int contourcount=0;
    37     for(;contourSeq!=0;contourSeq=contourSeq->h_next)
    38     {
    39         contourcount++;
    40     }
    41     printf("contour count is %d",contourcount);
    42 
    43 
    44     
    45     return pOutlineImage;
    46     
    47 
    48 
    49 }
    50 
    51 
    52 int main(int argc,char** argv)
    53 {
    54     IplImage *src,*binaryim,*contourim;
    55     src=cvLoadImage("gtest2.bmp",1);
    56     binaryim=ImageThreshold(src);
    57     contourim = printlunkuo(binaryim);
    58     
    59     
    60     cvSaveImage("save.bmp", contourim);
    61     
    62     
    63     
    64     
    65     
    66     
    67     
    68     cvNamedWindow("Binary_image",0);    
    69     cvShowImage("Binary_image",binaryim);
    70     cvNamedWindow("Contour_image",0);    
    71     cvShowImage("Contour_image",contourim);
    72     cvWaitKey(0);
    73 
    74     cvDestroyWindow("Binary_image");
    75     cvReleaseImage(&binaryim);
    76     cvDestroyWindow("Contours_image");
    77     cvReleaseImage(&contourim);
    78 
    79 
    80 }
  • 相关阅读:
    Linux服务器上监控网络带宽的18个常用命令
    centos性能监控系列三:监控工具atop详解
    centos性能监控系列二:Collectl初解
    centos查看硬件信息
    CentOS 6.4安装配置LAMP服务器(Apache+PHP5+MySQL)
    CentOS下如何完全卸载MySQL?卸载自带的mysql
    安全初始化MySql服务器
    用nginx-gridFS读取MongoDB的图片及文件(为什么你老是配不成功?)
    理解去中心化 稳定币 DAI
    如何开发一款以太坊(安卓)钱包系列2
  • 原文地址:https://www.cnblogs.com/gaohai/p/5736585.html
Copyright © 2011-2022 走看看