zoukankan      html  css  js  c++  java
  • 连通域搜索

    #include "stdafx.h"
    #include <stdio.h>  
    #include <cv.h>  
    #include <opencv2/highgui/highgui.hpp>  
    using namespace std;
    int main(int argc, char** argv)
    {
    	//声明IplImage指针
    	IplImage* src = cvLoadImage("e:\333.jpg", 0);
    	IplImage* dst = cvCreateImage(cvGetSize(src), 8, 3);
    	CvMemStorage* storage = cvCreateMemStorage(0);
    	CvSeq* contour = 0;
    	cvThreshold(src, src, 120, 255, CV_THRESH_BINARY);   // 二值化  
    	cvNamedWindow("Source", 1);
    	cvShowImage("Source", src);
    	// 提取轮廓  
    	int contour_num = cvFindContours(src, storage, &contour, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
    	cvZero(dst);        // 清空数组  
    	CvSeq *_contour = contour;
    	double maxarea = 0;
    	double minarea = 10;
    	int m = 0;
    	for (; contour != 0; contour = contour->h_next)
    	{
    
    		double tmparea = fabs(cvContourArea(contour));
    		if (tmparea < minarea)
    		{
    			cvSeqRemove(contour, 0); // 删除面积小于设定值的轮廓  
    			continue;
    		}
    		CvRect aRect = cvBoundingRect(contour, 0);
    		if ((aRect.width / aRect.height)<1)
    		{
    			cvSeqRemove(contour, 0); //删除宽高比例小于设定值的轮廓  
    			continue;
    		}
    		if (tmparea > maxarea)
    		{
    			maxarea = tmparea;
    		}
    		m++;
    		// 创建一个色彩值  
    		CvScalar color = CV_RGB(0, 255, 255);
    
    		//max_level 绘制轮廓的最大等级。如果等级为0,绘制单独的轮廓。如果为1,绘制轮廓及在其后的相同的级别下轮廓  
    		//如果值为2,所有的轮廓。如果等级为2,绘制所有同级轮廓及所有低一级轮廓,诸此种种  
    		//如果值为负数,函数不绘制同级轮廓,但会升序绘制直到级别为abs(max_level)-1的子轮廓  
    		cvDrawContours(dst, contour, color, color, -1, 1, 8);   //绘制外部和内部的轮廓  
    	}
    	contour = _contour;
    	int count = 0;
    	for (; contour != 0; contour = contour->h_next)
    	{
    		count++;
    		double tmparea = fabs(cvContourArea(contour));
    		if (tmparea == maxarea)
    		{
    			CvScalar color = CV_RGB(255, 0, 0);
    			cvDrawContours(dst, contour, color, color, -1, 1, 8);
    		}
    	}
    	printf("The total number of contours is:%d", count);
    	cvNamedWindow("Components", 1);
    	cvShowImage("Components", dst);
    	cvWaitKey(0);
    	cvDestroyWindow("Source");
    	cvReleaseImage(&src);
    	cvDestroyWindow("Components");
    	cvReleaseImage(&dst);
    
    	return 0;
    }
    

      

  • 相关阅读:
    Run UliPad 4.1 Under Windows 7 64bit and wxPython 3.0.2
    Ubuntu下编译SuiteSparse-4.4.1和METIS-4.0.3
    Call Paralution Solver from Fortran
    Python调用C/Fortran混合的动态链接库-下篇
    调用gluNurbsCurve绘制圆弧
    glutBitmapCharacter及glBitmap在ATI显卡下无法正常显示的原因初探
    PyOpenGL利用文泉驿正黑字体显示中文字体
    图论常用算法之二 算法模板及建模总结
    图论常用算法之一 POJ图论题集【转载】
    通过身边小事解释机器学习是什么?
  • 原文地址:https://www.cnblogs.com/necp-zwl/p/6649428.html
Copyright © 2011-2022 走看看