轮廓(contour)检测

来源:互联网 发布:软件中间件 编辑:程序博客网 时间:2024/06/06 20:03

来自于仕琪的讲稿《使用OpenCV进行图像处理》中的例程

/************************************************** * 轮廓检测 * 主要函数: *      cvFindContours *      cvDrawContours **************************************************/ /*********************************************************************** * OpenCV example * By Shiqi Yu 2006 ***********************************************************************/ #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);    //载入图像,强制转化为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);        //查找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;}
[编辑]

Python版本

# -*- coding:utf-8 -*-############################################################ OpenCV example## 轮廓检测## 主要函数:cvFindContours, cvDrawContours## By ChaiShushan 2008########################################################### import sys # 导入OpenCV模块 from opencv.cv import *from opencv.highgui import * if __name__ == '__main__'# 声明IplImage指针     pImg = None;    pContourImg = None;     storage = cvCreateMemStorage(0);    contour = None;    mode = CV_RETR_EXTERNAL;     if len(sys.argv) == 3 and sys.argv[2] == "all":        mode = CV_RETR_CCOMP     # 创建窗口     cvNamedWindow("src", 1)    cvNamedWindow("contour",1# 载入图像,强制转化为Gray     if len(sys.argv) >= 2:         pImg = cvLoadImage(sys.argv[1], 0)        if not pImg: sys.exit(-1)         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);         # 查找contour         n, contour = cvFindContours( pImg, storage, sizeof_CvContour,            mode, CV_CHAIN_APPROX_SIMPLE);     else# 销毁窗口         cvDestroyWindow( "src" );        cvDestroyWindow( "contour" );        cvReleaseMemStorage(storage);        sys.exit(-1# 将轮廓画出     cvDrawContours(pContourImg, contour, CV_RGB(255,0,0), CV_RGB(0, 0, 255),        2, 2, 8);     # 显示图像     cvShowImage( "contour", pContourImg );    cvWaitKey(0);     # 销毁窗口     cvDestroyWindow( "src" );    cvDestroyWindow( "contour" );     # 释放图像     cvReleaseImage( pImg );    cvReleaseImage( pContourImg );     cvReleaseMemStorage(storage);     sys.exit(0)
注: Python版本由chai2010改写.
[编辑]

Python2.7-OpenCV2.2版本

'''Created on 2011-8-18 @author: Sunny'''#import cv moduleimport cvimport sys if __name__ == '__main__':    # Declare the IplImage    pImg = None;    pContourImg = None;     storage = cv.CreateMemStorage(0);    contour = None;    mode = cv.CV_RETR_EXTERNAL;         # Create Windows     cv.NamedWindow("src", 1)    cv.NamedWindow("contour",1# Load Image, Convert to Gray by force     pImg = cv.LoadImage("image.jpg", 0) # A image in the same directory of the file.     cv.ShowImage( "src", pImg );     # Apply the Memory Storage for Contour Image.             pContourImg = cv.CreateImage(cv.GetSize(pImg),cv.IPL_DEPTH_8U,3);     # copy source image and convert it to BGR image     cv.CvtColor(pImg, pContourImg, cv.CV_GRAY2BGR);     # Find contours     contour = cv.FindContours( pImg, storage, cv.CV_RETR_CCOMP,        cv.CV_CHAIN_APPROX_SIMPLE);      # Draw the Contours     cv.DrawContours(pContourImg, contour, cv.CV_RGB(255,0,0), cv.CV_RGB(0, 0, 255),        2, 2, 8);     # Show Image     cv.ShowImage( "contour", pContourImg );    cv.WaitKey(0);     # Destory Windows     cv.DestroyWindow( "src" );    cv.DestroyWindow( "contour" );     # Python2.7-OpenCV2.2 will Release Image MemStorage Automatically     #cv.ReleaseImage( pImg );    #cv.ReleaseImage( pContourImg );     #cv.ReleaseMemStorage(storage);     sys.exit(0)
注: Python2.7-OpenCV2.2版本由sunny2020改写.
0 0
原创粉丝点击