资源简介

从静态的视频帧中获取的人物图片先二值化,再利用开操作闭操作以及轮廓填充,获取人物轮廓

资源截图

代码片段和文件信息

// DetectionPic.cpp : 定义控制台应用程序的入口点。
//

#include “stdafx.h“
#include 
#include “cv.h“
#include “highgui.h“
#include “cxcore.h“ 
#include 
#include “video/background_segm.hpp“
#include 
using namespace cv;
using namespace std;


int _tmain(int argc _TCHAR* argv[])
{

int frameNum = 0count=0;
Mat frame maskframe2;
CvScalar exter_hole inter_hole;
CvMemStorage *storage = cvCreateMemStorage(0);
CvSeq *contour = 0;
int contours = 0;
IplImage  *dst_gray = NULL *dst_filed = NULL *dst_DE = NULL *dst_contour = NULL *img_del = NULL *img = NULL;
Mat element1 = getStructuringElement(MORPH_ELLIPSE Size(2 2) Point(-1 -1));
Mat element2 = getStructuringElement(MORPH_CROSS Size(2 2) Point(-1 -1));
img = cvLoadImage(“E://图库//3.jpg“1);
cvNamedWindow(“Contour_“ 1);
cvShowImage(“Contour_“ img);
cvWaitKey(1);
img_del = cvCreateImage(cvGetSize(img) img->depth 1);
dst_gray = cvCreateImage(cvGetSize(img) img->depth 1);
dst_filed = cvCreateImage(cvGetSize(img) img->depth 1);
dst_contour = cvCreateImage(cvGetSize(img) img->depth 1);
cvCvtColor(img img_del CV_BGR2GRAY);//转为灰度图
//cvCopy(&imgimg_del);

//转为二值图
cvThreshold(img_del dst_gray 100 255 CV_THRESH_BINARY_INV);
cvNamedWindow(“Gray“ 1);
cvShowImage(“Gray“ dst_gray);
waitKey(1);

//膨胀腐蚀
//cv::erode((Mat(dst_gray)) frame element2 cv::Point(-1 -1) 1);//腐蚀
cv::dilate(Mat(dst_gray) frame element1 cv::Point(-1 -1) 3);
cv::erode(frame frame element2 cv::Point(-1 -1) 1);//腐蚀
frame.copyTo(frame2);
dst_DE = &IplImage(frame2);

//空洞填充
dst_filed = cvCloneImage(dst_DE);
//cvfindcontours会改变输入图片
contours = cvFindContours(dst_filed storage &contour sizeof(CvContour) CV_RETR_LIST CV_CHAIN_APPROX_NONE);
for (; contour != 0; contour = contour->h_next)
{
count = contour->total;
if (count < 2)
continue;
else
{
//cv::Size(cv::Size(row col) 

评论

共有 条评论