使用OpenCV可以对图像的轮廓进行检测。这是之前用过的代码,挺简单的,回顾一下。主要要进行以下2步操作:

1.cvThreshold():对图像进行二值化处理

2.cvFindContours():查找图像轮廓

注意:这个过程中图像要转化为灰度图。

/***********************************************************************

雷霄骅

***********************************************************************/

#include "stdafx.h"

#include "cv.h"

#include "cxcore.h"

#include "highgui.h"

int main( int argc, char** argv )

{

//声明IplImage指针

IplImage* pImg = NULL;

IplImage* pContourImg = NULL;

CvMemStorage * storage = cvCreateMemStorage(0);

CvSeq * contour = 0;

int mode = CV_RETR_EXTERNAL;

if( argc == 3)

if(strcmp(argv[2], "all") == 0)

mode = CV_RETR_CCOMP; //内外轮廓都检测

//创建窗口

cvNamedWindow("src", 1);

cvNamedWindow("contour",1);

cvNamedWindow("threshold",1);

//载入图像,强制转化为Gray

if( argc >= 2 &&

(pImg = cvLoadImage( argv[1], 0)) != 0 )

{

cvShowImage( "src", pImg );

//为轮廓显示图像申请空间

//3通道图像,以便用彩色显示

pContourImg = cvCreateImage(cvGetSize(pImg),

IPL_DEPTH_8U,

3);

//copy source image and convert it to BGR image

cvCvtColor(pImg, pContourImg, CV_GRAY2BGR);

//----阈值分割-------------------------------------------

cvThreshold( pImg, pImg, 150, 255, CV_THRESH_BINARY );

cvShowImage( "threshold", pImg );

//-----------------------------------------------

//查找contour----------------输入必须是二值图像

cvFindContours( pImg, storage, &contour, sizeof(CvContour),

mode, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));

}

else

{

//销毁窗口

cvDestroyWindow( "src" );

cvDestroyWindow( "contour" );

cvReleaseMemStorage(&storage);

return -1;

}

//将轮廓画出

cvDrawContours(pContourImg, contour,

CV_RGB(0,0,255), CV_RGB(255, 0, 0),

2, 2, 8, cvPoint(0,0));

//显示图像

cvShowImage( "contour", pContourImg );

cvWaitKey(0);

//销毁窗口

cvDestroyWindow( "src" );

cvDestroyWindow( "contour" );

//释放图像

cvReleaseImage( &pImg );

cvReleaseImage( &pContourImg );

cvReleaseMemStorage(&storage);

return 0;

}

源图像:

二值化以后:

轮廓:

java opencv 轮廓检测,OpenCV 轮廓检测 - 雷霄骅(leixiaohua1020)的个人页面 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. java电子报刊网站_采集电子报纸 - 杨尚川的个人页面 - OSCHINA - 中文开源技术交流社区...

    1.接口 /** *报纸采集器 * @author 杨尚川 */ public interface PaperCollector { /** * 下载当日报纸,一个文件对应一个版面 * @return ...

  2. java亲密数的解题思路,算法解题思路总结 - jjhgx的个人空间 - OSCHINA - 中文开源技术交流社区...

    算法解题思路: 细读算法要求 找到极限情况 找到临界情况,结果依赖 找到最终的结束求解点 编程实现:考虑算法的空间复杂度和时间复杂度 案例说明: 假设: 输入字符串为:s, 长度为:slen, s的第 ...

  3. java 树的层次遍历_Java遍历树的层级 - osc_jegm3yg5的个人空间 - OSCHINA - 中文开源技术交流社区...

    非科班出身,欢迎指正. 要实现的逻辑是,在一棵树中,给出任意一个节点,获取到该节点下的N个层级. 一.树型结构 下图的树中,节点上的字母代表节点的名字,字母下的代表该节点的下单金额. 二.数据准备 组 ...

  4. java有没有回调函数_Java中的回调函数 - wangjianme的个人空间 - OSCHINA - 中文开源技术交流社区...

    Java代码的回调函数经常由框架或是系统定义,由程序开发人员填充. 它的最主要特点是即定义了调用的规范同时又非常的灵活. 回调函数有些类似于观察者模式,它们的区别在于:观察者模式返回的参数为Event ...

  5. java 锁的类型_Java锁的种类 - shawnplaying的个人页面 - OSCHINA - 中文开源技术交流社区...

    Java锁和并发需要结合在一块了理解,涉及到了多个话题. 本文主要参考了 http://ifeve.com/java_lock_see1/ 但是我认为原文中有某些错误,我在下面的代码中做了修改. 公平 ...

  6. java 在界面上画一个时钟_编写程序显示一个时钟 - javaCoder的个人页面 - OSCHINA - 中文开源技术交流社区...

    编写程序显示一个时钟.示例输出如图所示. 代码: package com.DisplayClock; import javax.swing.*; import java.awt.*; import j ...

  7. java构造函数重载继承_Java基础-继承 - 写代码换盆的个人空间 - OSCHINA - 中文开源技术交流社区...

    访问权限 Java 中有三个访问权限修饰符:private.protected 以及 public,如果不加访问修饰符,表示包级可见. 可以对类或类中的成员(字段和方法)加上访问修饰符. 类可见表示其 ...

  8. java创建两个foo方法_Java类实例化原理 - osc_foo7glsg的个人空间 - OSCHINA - 中文开源技术交流社区...

    Java对象的创建过程包括类初始化(类实例化两个阶段. 一.Java对象创建时机 (1)使用new关键字创建对象 (2)反射创建对象 使用Class类的newInstance方法 Student st ...

  9. java简述标识符和保留字区别_Java 基础语法 - 流年似水莫停留的个人页面 - OSCHINA - 中文开源技术交流社区...

    Java 基础语法 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如,一 ...

最新文章

  1. java算法----排序----(6)希尔排序(最小增量排序)
  2. 所长不会用计算机,梅州市公安局: 两派出所所长不会电脑被停职
  3. jquery点击事件遇到的小bug
  4. 如何在一年内拥有十年的工作经验(值得你反复读5遍以上)
  5. ArrayList 有序集合 c#
  6. Linux内核dev_set_drvdata()和dev_get_drvdata()存储自定义结构体用法
  7. php gd测试代码,PHP gd_info()用法及代码示例
  8. Windows PE探秘
  9. Linux 安装.deb软件包之前 dpkg-deb 命令查看.deb文件详细信息 版本号 包名
  10. 在纯Win10环境下部署DzzOffice+OnlyOffice协同办公系统
  11. 如何在 Windows 上安装 ONLYOFFICE 文档 v7.2
  12. FDD and HDD
  13. win10重装系统打开分区或者磁盘提示无法访问解决办法
  14. c++/c 大整数乘法的分治与递归实现(string存储)
  15. os中的判断文件是否存在
  16. Python----获取http请求报文数据
  17. lotus系统可以再linux下运行吗,IBM Lotus Notes 8.5 在 MAC 和 Linux 系统安装的新特性
  18. mysql tcl 安装教程_TCL电视安装第三方应用软件的方法_简便教程
  19. 【金字塔Python量化学习笔记】01课:利用Python导出价格数据
  20. Beyond Compare for mac报错:这个授权密钥已被吊销,5386-2414

热门文章

  1. IOS开发(63)之GCD执行延迟操作
  2. 设计模式七:Adapter(适配器)——类对象结构型模式
  3. 【AWS】 AWS Free Usage Tier
  4. 在Delphi中使用Action降低水平功能和业务功能的耦合
  5. Python+ZeroMQ快速实现消息发布与订阅
  6. python读取json并列_python解析含有重复key的json方法
  7. java框架mangedv,Spring集成JPA后,报“Not an managed type: class x.x.x
  8. java做一个客房管理系统定制_开题报告基于Java的酒店客房管理系统的设计与实现.doc...
  9. js打印到控制台_如何实现可复用的控制台“艺术字”打印功能
  10. 力扣704,二分查找(JavaScript)