/*
#include<opencv2\opencv.hpp>
using namespace cv;
int main()
{
Mat img = imread("1.jpg");
imshow("测试图片",img);
waitKey(50);
return 0;
}*/
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% %%%%%%
%%%%%% 欢迎到www.opencvchina.com下载源代码和资料 %%%%%%
%%%%%% %%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*/
/*
* Code written by Lya (GeckoGeek.fr)
*/
//#include "stdafx.h"
#include "opencv/highgui.h"
#include "opencv/cv.h"
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
// Maths methods
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b))
#define abs(x) ((x) > 0 ? (x) : -(x))
#define sign(x) ((x) > 0 ? 1 : -1)
// Step mooving for object min & max
#define STEP_MIN 5
#define STEP_MAX 100
//轮廓区域最小面积
int detectarea=100;
IplImage *image;
IplImage *im;
// Position of the object we overlay
CvPoint objectPos = cvPoint(-1, -1); //目标当前位置
// Color tracked and our tolerance towards it
int h = 0, s = 0, v = 0, tolerance = 10;
CvPoint temp ;
int T_HSV[3]={111,111,23};
// int HSV[3]={177,185,120};
int HSV[3]={179,79,81};
int HSV_f[3]={177,185,120};
//int count=0;
int countd=0; //在drawbody函数用到
CvPoint HEAD;//上次的头部坐标
CvPoint HAND[5];//用于存储上次的手部坐标
CvPoint FOOT[5];//用于存储上次的脚坐标
CvPoint point[10];//存储目标位置
CvScalar color=CV_RGB(255,158,97);
// Next position of the object we overlay
CvPoint objectNextPos;
//此函数用于画出image图片中是HSV[]色彩的所有轮廓,HSV[]是感兴趣的三通道色彩
CvPoint ditalcontours(IplImage* image, int *nbPixels,int HSV[],int detectarea) {
void drawcontours(IplImage* mask,IplImage* image);
int x, y;
//CvScalar pixel;
IplImage *hsv, *mask;
IplConvKernel *kernel;
int sommeX = 0, sommeY = 0;
*nbPixels = 0;
// Create the mask &initialize it to white (no color detected)
mask = cvCreateImage(cvGetSize(image), image->depth, 1);
// Create the hsv image
hsv = cvCloneImage(image);
cvCvtColor(image, hsv, CV_BGR2HSV);
// We create the mask
cvInRangeS(hsv, cvScalar(HSV[0] - tolerance -1, HSV[1] - tolerance,0), cvScalar(HSV[0] + tolerance -1, HSV[1] + tolerance, 255), mask);
//cvInRangeS(1,2,3,4)此函数就是从hsv图像中选出在范围在2到3之间的像素点,选出来符合的置为1,否则置为0。
//最后把二值化图像存在mask中
//cvShowImage("mask第一步", mask);//展示mask效果
// Create kernels for the morphological operation
kernel = cvCreateStructuringElementEx(5, 5, 2, 2, CV_SHAPE_CROSS);
//生成膨胀和溶解结构 kernel
// Morphological opening (inverse because we have white pixels on black background)
cvDilate(mask, mask, kernel, 1); //膨胀
cvErode(mask, mask, kernel, 1); //溶解
// We go through the mask to look for the tracked object and get its gravity center
for(x = 0; x < mask->width; x++) {
for(y = 0; y < mask->height; y++) {
// If its a tracked pixel, count it to the center of gravity's calcul
if(((uchar *)(mask->imageData + y*
Demo1:视频人体检测
最新推荐文章于 2024-04-27 09:45:09 发布