文档章节

OpenCV 轮廓检测

abcijkxyz
 abcijkxyz
发布于 2016/08/06 11:58
字数 324
阅读 12
收藏 0

使用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;
}

源图像:


二值化以后:


轮廓:


本文转载自:http://blog.csdn.net/leixiaohua1020/article/details/15029309

abcijkxyz
粉丝 63
博文 6196
码字总数 1876
作品 0
深圳
项目经理
私信 提问

暂无文章

全面剖析 Knative Eventing 0.6 版本新特性

前言 Knative Eventing 0.6 版本已经于5月15号正式发布。相比于0.5版本,此次发布包含了一些重要特性及更新。针对这些新特性以及更新,我们如何快速、精准的定位主要技术点。本篇文章针对这些...

阿里云官方博客
4分钟前
0
0
在闲鱼,我们如何用Dart做高效后端开发?

背景 像阿里其他技术团队以及业界的做法一样,闲鱼的大多数后端应用都是全部使用java来实现的。java易用、丰富的库、结构容易设计的特性决定了它是进行业务开发的最好语言之一。后端应用中数...

阿里云云栖社区
6分钟前
3
1
初学Docker容器网络不得不看的学习笔记

【技术沙龙002期】数据中台:宜信敏捷数据中台建设实践|宜信技术沙龙 将于5月23日晚8点线上直播,点击报名 一、关于Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0...

宜信技术学院
8分钟前
2
0
Django框架配置

今天我们学习Django框架配置,首先先来看一下如何在Django中创建APP! 1.Django中创建APP 首先我们打开PyCharm,找到之前你创建的Django项目,我的项目是First_Project: (1)先选中你要运行...

彩色泡泡糖
10分钟前
0
0
git代码迁移

一、从阿里云code迁移到gitLab 1、在gitLab上新建一个项目Bicon,添加私钥 2、从原地址克隆一份裸版本库 git clone --bare git://xxxx_Bicon.git 这里的地址是阿里云code的地址 3、以镜像推送...

星爵22
11分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部