轮廓(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
- (contour)轮廓检测
- 轮廓(contour)检测
- 轮廓(contour)检测2
- OpenCV(C++版)轮廓(contour)检测
- contour 轮廓
- 基于轮廓线索(Contour Cues)的实时行人检测
- 基于轮廓线索(Contour Cues)的实时行人检测
- 基于轮廓线索(Contour Cues)的实时行人检测
- opencv:轮廓contour
- 基于纹理边缘抑制的轮廓和边界检测(Contour and Boundary Detection)
- 基于轮廓线索的实时人体检测 Real-Time Human Detection Using Contour Cues
- opencv的contour轮廓排序
- Contour Tracing Algorithm(轮廓跟踪算法)
- Active Contour Models 主动轮廓模型概述
- Active Contour Models 主动轮廓模型
- 轮廓检测
- 轮廓检测
- 轮廓检测
- 关于iOS之Runloop
- liunx下的命令 Ctrl+z 和 Ctrl+c 有区别
- ContentProvider使用例子
- C#三种字符串拼接方法性能浅析
- Android Telephony 框架分析
- 轮廓(contour)检测
- open系统调用在内核中的流程分析
- Java读/写文件工具类
- 数据库服务器、业务服务器上出现DW20.exe处理
- 为什么刚买来250G的硬盘插到电脑里只有大约232G?
- AX 数据库日志如何选择正确的表名和字段名?
- iOS APP上架札记
- springmvc下使用formdata异步ajax上传图片
- 从浏览器打开网址到请求到网页内容超细原理过程详解(免费)