搜索
bottom↓
回复: 9

opencv寻找轮廓

[复制链接]

出0入0汤圆

发表于 2011-10-31 16:16:43 | 显示全部楼层 |阅读模式
opencv寻找轮廓例子:
运行环境:vc++ 6.0

#include "cv.h"                                                                                             
#include "highgui.h"                                                                                       
IplImage* src;                                                                                             
IplImage* img;                                                                                             
IplImage* dst;                                                                                             
CvMemStorage* storage=NULL;                                                                                 
                                                                                       
int thresh=50;                                                                                            
void on_trackbar(int pos)                                                                                   
{         
CvSeq* contour=0;      
if(storage==NULL)                                                                                          
{                                                                                                         
  dst=cvCreateImage(cvGetSize(src),8,3);                                                                    
  storage=cvCreateMemStorage(0);                                                                           
}                                                                                                         
else                                                                                                      
{                                                                                                         
  cvClearMemStorage(storage);                                                                              
}
cvSmooth(src,src,CV_GAUSSIAN,3,3,0,0);
cvThreshold( src,img,thresh,200,CV_THRESH_BINARY);                                                         
cvNamedWindow( "threshold",1);                                                                             
cvShowImage( "threshold", img );                                                                           
cvFindContours(img,storage,&contour,sizeof(CvContour),CV_RETR_CCOMP,CV_CHAIN_APPROX_NONE,cvPoint(0,0));
cvZero( dst );
//cvDrawContours(dst,contour,CV_RGB(255,0,0),CV_RGB(0,255,0),-1,1,CV_AA,cvPoint(0,0));
for( ; contour; contour = contour->h_next )                                                           
{
  CvRect rect=cvBoundingRect(contour,1);
  CvPoint pt1=cvPoint(rect.x,rect.y),
         pt2=cvPoint(rect.x+rect.width,rect.y+rect.height);
  cvRectangle(dst,pt1,pt2,CV_RGB(255,0,0),1,CV_AA,0);
  cvLine(dst,pt1,pt2,CV_RGB(0,255,0),1,CV_AA,0);
  pt1=cvPoint(rect.x,rect.y+rect.height),
  pt2=cvPoint(rect.x+rect.width,rect.y);
  cvLine(dst,pt1,pt2,CV_RGB(0,255,0),1,CV_AA,0);                    
}                                                                                                         
cvShowImage( "Components", dst );
}                                                                                                           
int main( int argc, char** argv )                                                                           
{                                                                                                            
                                                                                                            
if(argc==2&&(src=cvLoadImage(argv[1],0))!=0)                                                               
{                                                                                                         
  img=cvCreateImage(cvGetSize(src),8,1);                                                                                                                                    
  cvNamedWindow( "Source",1);                                                                              
  cvShowImage( "Source", src );                                                                             
  cvNamedWindow( "Components",1);                                                                           
  cvCreateTrackbar("Threshold","Components",&thresh,200,on_trackbar);                                       
  on_trackbar(0);                                                                                          
  cvWaitKey(0);                                                                                             
  cvDestroyWindow( "sorce" );                                                                              
  cvDestroyWindow( "threshold" );                                                                           
  cvDestroyWindow( "Components" );                                                                          
  cvReleaseImage( &src);                                                                                    
  cvReleaseImage( &img );                                                                                   
  cvReleaseImage(&dst);                                                                                    
  cvReleaseMemStorage(&storage);                                                                           
}                                                                                                         
}


原图:

原图片 (原文件名:5.JPG)

阈值处理后的图像:

阈值处理后的图片 (原文件名:4.JPG)

找到轮廓的图像:

检测出轮廓图片 (原文件名:3.JPG)

出0入0汤圆

发表于 2011-11-16 17:35:21 | 显示全部楼层
回复【楼主位】mingyitao2052
-----------------------------------------------------------------------

不错,好例子

出0入0汤圆

发表于 2011-11-23 20:30:58 | 显示全部楼层
非常感谢,最近正在学习这方面的东西,很有帮助!

出0入0汤圆

发表于 2012-3-9 03:23:00 | 显示全部楼层
很好,mark

出0入0汤圆

发表于 2012-3-27 18:19:45 | 显示全部楼层
marking,非常感谢

出0入0汤圆

发表于 2013-3-23 15:30:04 | 显示全部楼层
mark opencv 4 Contours

出0入0汤圆

发表于 2014-10-12 15:23:37 | 显示全部楼层
多谢分享!

出0入0汤圆

发表于 2015-6-15 20:09:20 | 显示全部楼层
mark,正在学习

出0入0汤圆

发表于 2015-6-15 20:13:12 | 显示全部楼层
楼主位是1.0版的OpenCV吧,3.0版的OpenCV都已经推出了,更多C++特性。。。。

出0入0汤圆

发表于 2015-6-30 10:53:51 | 显示全部楼层
学习中,mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-8 08:43

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表