当前位置: 首页 > news >正文

java findcontour_cvFindContours获取轮廓数目和轮廓图像

cvFindContours使用方法

我画了三个椭圆,用cvFindContours函数找轮廓,并且输出轮廓数目和轮廓图像,但是输出的轮廓数目是6,不知道为什么? 首先要配置下环境,即:cv highgui ml 的配置。下面是代码在Win32下运行的,如下:

#include "stdafx.h"

#include

#include

#include

using namespace std;

int main ()

{

IplImage *img =

cvCreateImage(cvSize(640,480),8,1);

cvZero(img);

cvEllipse(img,cvPoint(320,240),cvSize(200,100),0,0,360,cvScalarAll(255));

cvEllipse(img,cvPoint(320,240),cvSize(120,60),0,0,360,cvScalarAll(255));

cvEllipse(img,cvPoint(320,240),cvSize(100,20),0,0,360,cvScalarAll(255));

CvMemStorage

*storage=cvCreateMemStorage(0);

CvSeq *contours=0;

cvFindContours(img,storage,&contours);

cvZero(img);

cvDrawContours(img,contours,cvScalarAll(50),cvScalarAll(50),100);

int num=1;

while(contours->h_next)

{

num++;

contours=contours->h_next;

}

cout<

cvNamedWindow("Contours",1);

cvShowImage("Contours",img);

cvWaitKey();

cvReleaseImage(&img);

cvDestroyWindow("Contours");

return 0;

}

按我的理解,轮廓应该分为外部边界和孔,你程序中的每个椭圆其实也应该有两个轮廓,也就是被统计了两次,所以总共有6个轮廓;如果想只统计外部边界轮廓,可以将修改程序中,cvFindContours(img,storage,&contours,sizeof(CvContour),CV_RETR_CCOMP);cvDrawContours(img,contours,cvScalarAll(50),cvScalarAll(50),1);

CV_RETR_CCOMP方法将所有轮廓组织成双层结构,上层是所有外部边界,而设置max_level为1则只画出属于同一等级的所有轮廓;这样就应该只会统计3次;

图如下:

a4c26d1e5885305701be709a3d33442f.pnga4c26d1e5885305701be709a3d33442f.png

相关文章:

  • java if 没有_使用if语句时,为什么我的代码没有给出正确的答案? - java
  • php时间格式转换成时间戳,php时间格式转换成时间戳的方法
  • echarts php 数据处理,PHP 使用Echarts生成数据统计报表详解
  • conv php,php metaphone()函数及php localeconv() 函数实例解析
  • php 配置 error_reporting,关于php中的错误配置display_errors与error_reporting说明
  • php计算器源码,php 简单计算器
  • 学生考勤管理系统php,php158 学生考勤管理系统
  • linux php-mbstring下载,linux下php加载mbstring的方法 | 快享
  • php 與或非,js逻辑与,或,非
  • java邮件代码,java发送邮件(示例代码)
  • linux下mysql乱码,Linux下mysql中文乱码解决方案
  • matlab里怎么计算期望,§7.4.2 利用MATLAB计算随机变量的期望和方差.pdf
  • php静态页缓存,php处理静态页面:页面设置缓存时间图文详解
  • java 数据的储存,java数据储存方式详解
  • helpers.php,helpers.php
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [译]前端离线指南(上)
  • 《深入 React 技术栈》
  • 【EOS】Cleos基础
  • Angular6错误 Service: No provider for Renderer2
  • Git初体验
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • HTML5新特性总结
  • IOS评论框不贴底(ios12新bug)
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • javascript面向对象之创建对象
  • Java精华积累:初学者都应该搞懂的问题
  • JDK 6和JDK 7中的substring()方法
  • JS专题之继承
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • ng6--错误信息小结(持续更新)
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • spring学习第二天
  • vue 个人积累(使用工具,组件)
  • Webpack 4x 之路 ( 四 )
  • 在Docker Swarm上部署Apache Storm:第1部分
  • # dbt source dbt source freshness命令详解
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #Java第九次作业--输入输出流和文件操作
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (笔试题)分解质因式
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • .NET Core 项目指定SDK版本
  • .NET Core跨平台微服务学习资源
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .Net MVC + EF搭建学生管理系统
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .NET中winform传递参数至Url并获得返回值或文件
  • /etc/motd and /etc/issue
  • @ModelAttribute 注解