在运动目标检测中,我们经常会碰到将前景和背景分离后检测属于前景的连通域,并把它标记出来,Opencv中的cvFindContours这个函数给我们提供了很大的便利。我们通过这个函数将前景区域中的连通域框出来以便后续的处理。
下面贴出代码用于对输入的图片进行标记轮廓
#include <cv.h>
#include<highgui.h>
#include <iostream>
using namespace std;
#define MIN_AREA 1000//定义最小有效的矩形面积
int main()
{
IplImage *img=cvLoadImage("test.jpg");//原始图
IplImage *grayimg=cvCreateImage(cvGetSize(img),8,1);//灰度图
cvCvtColor(img,grayimg,CV_BGR2GRAY);//彩色转灰度
cvThreshold(grayimg, grayimg,120, 255, CV_THRESH_BINARY);//二值化
cvNamedWindow("原始图",0);
cvNamedWindow("轮廓图",0);
cvShowImage("原始图",grayimg);
CvMemStorage * storage = cvCreateMemStorage(0);
CvSeq * contour = 0;
int num=cvFindContours(grayimg, storage, &contour, sizeof(CvContour),CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
for(;contour!=0;contour=contour->h_next)
{
CvRect rect=((CvContour *)contour)->rect;