博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenCV 轮廓检测
阅读量:6589 次
发布时间:2019-06-24

本文共 2022 字,大约阅读时间需要 6 分钟。

hot3.png

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

源图像:

二值化以后:

轮廓:

转载于:https://my.oschina.net/leixiaohua1020/blog/302025

你可能感兴趣的文章
曲线学习PyQt5方案一
查看>>
爬虫采集-基于webkit核心的客户端Ghost.py [爬虫实例]
查看>>
企业私有云之rabbitmq高可用
查看>>
OpenCV学习】矩阵运算和操作2
查看>>
nginx+ffmpeg搭建rtmp转播rtsp流的flash服务器
查看>>
Win10 IoT C#开发 1 - Raspberry安装IoT系统及搭建开发环境
查看>>
关于在arm裸板编程时使用printf问题的解决方法
查看>>
开源人工智能技术将改变一切
查看>>
2015 上半年 JavaScript 使用统计数据
查看>>
《OpenGL ES 3.x游戏开发(上卷)》一2.4 文件I/O
查看>>
《写给程序员的数据挖掘实践指南》——5.2. 10折交叉验证的例子
查看>>
JVM性能优化, Part 5:Java的伸缩性
查看>>
《Python算法教程》——1.6 如果您感兴趣
查看>>
《正则表达式经典实例(第2版)》——2.18 向正则表达式中添加注释
查看>>
lolcat :一个在 Linux 终端中输出彩虹特效的命令行工具
查看>>
ROS机器人程序设计(原书第2版)3.9 3D可视化
查看>>
干货 | 豆子科技首席架构师钟声:Java的纯真年代
查看>>
《数字图像处理与机器视觉——Visual C++与Matlab实现》——0.2 数字图像处理与识别...
查看>>
Storm-源码分析-Topology Submit-Client
查看>>
深度解析Java8 – AbstractQueuedSynchronizer的实现分析(下)
查看>>