资源简介
用opencv进行姿态识别,人体姿态检测和动作识别
代码片段和文件信息
#include “opencv2/opencv.hpp“
#include
using namespace std;
using namespace cv;
Point center;
Point fre_center; //用于存储前一帧目标中心
int num=0;
vector points;
Mat MoveDetect(Mat background Mat img)
{
Mat result = img.clone();
Mat gray1 gray2;
cvtColor(background gray1 CV_BGR2GRAY);
cvtColor(img gray2 CV_BGR2GRAY);
Mat diff;
absdiff(gray1 gray2 diff);
//imshow(“absdiss“ diff);
threshold(diff diff 45 255 CV_THRESH_BINARY);
//imshow(“threshold“ diff);
Mat element = getStructuringElement(MORPH_RECT Size(2 2));
Mat element2 = getStructuringElement(MORPH_RECT Size(1010));
medianBlur(diff diff 5);
//imshow(“medianBlur“ diff);
/*blur(diff diff Size(10 10));
imshow(“blur“ diff);*/
erode(diff diff element);
//imshow(“erode“ diff);
dilate(diff diff element2);
imshow(“dilate“ diff);
vector> contours;
vector hierarcy;
findContours(diff contours hierarcy CV_RETR_EXTERNAL CHAIN_APPROX_NONE); //查找轮廓
vector boundRect(contours.size()); //定义外接矩形集合
//drawContours(result contours -1 Scalar(02550) 5 8); //绘制轮廓
vector box(contours.size());
Point2f rect[4];
int x0=0 y0=0 w0=0 h0=0;
for(int i=0; i {
boundRect[i] = boundingRect((Mat)contours[i]); //查找每个轮廓的外接矩形
x0 = boundRect[i].x; //获得第i个外接矩形的左上角的x坐标
y0 = boundRect[i].y; //获得第i个外接矩形的左上角的y坐标
w0 = boundRect[i].width; //获得第i个外接矩形的宽度
h0 = boundRect[i].height; //获得第i个外接矩形的高度
if(w0>100 && h0>100)
{
num++;
//rectangle(result Point(x0 y0) Point(x0+w0 y0+h0) Scalar(0 255 0) 2 8); //绘制第i个外接矩形
box[i] = fitEllipse(Mat(contours[i]));
ellipse(result box[i] Scalar(255 0 0) 2 8);
circle(result box[i].center 5 Scalar(0 0 255) -1 8);
center = box[i].center; //保存当前帧的目标中心坐标
//cout<
if(num!=1)
{
//if((center.y-fre_center.y)>20)//检测动作跳
//{
// printf(“<< // putText(result “JUMP“ Point(30 70) CV_FONT_HERSHEY_COMPLEX 2 Scalar(0 0 255) 2 8);
//}
//if((fre_center.y-center.y)>20)//检测动作跳
//{
// //printf(“<< // putText(result “JUMP“ Point(30 70) CV_FONT_HERSHEY_COMPLEX 2 Scalar(0 0 255) 2 8);
//}
if((center.x-fre_center.x)>2)//检测动作跑
{
printf(“<< putText(result “RUN“ Point(30 70) CV_FONT_HERSHEY_COMPLEX 2 Scalar(0 0 255) 2 8);
}
//if((center.x-fre_center.x)>100)//检测动作走
//{
// printf(“<< // putText(result “RUN“ Point(30 70) CV_FONT_HERSHEY_COMPLEX
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-05-16 14:42 dong2\
目录 0 2018-04-24 10:28 dong2\Debug\
文件 135680 2018-05-14 16:01 dong2\Debug\dong2.exe
文件 2294616 2018-05-14 16:01 dong2\Debug\dong2.ilk
文件 1985536 2018-05-14 16:01 dong2\Debug\dong2.pdb
目录 0 2018-04-17 10:37 dong2\dong2\
目录 0 2018-05-14 16:01 dong2\dong2\Debug\
文件 22440 2018-05-14 16:01 dong2\dong2\Debug\CL.read.1.tlog
文件 280 2018-05-14 16:01 dong2\dong2\Debug\CL.write.1.tlog
文件 596 2018-05-14 16:01 dong2\dong2\Debug\cl.command.1.tlog
文件 1183 2018-04-20 10:15 dong2\dong2\Debug\dong2.Build.CppClean.log
文件 58 2018-05-14 16:01 dong2\dong2\Debug\dong2.lastbuildstate
文件 3260 2018-05-14 16:01 dong2\dong2\Debug\dong2.log
文件 566125 2018-05-14 16:01 dong2\dong2\Debug\dong2.obj
文件 2 2018-05-14 16:01 dong2\dong2\Debug\li
文件 2 2018-05-14 16:01 dong2\dong2\Debug\li
文件 2 2018-05-14 16:01 dong2\dong2\Debug\li
文件 2 2018-05-14 16:01 dong2\dong2\Debug\li
文件 2 2018-05-14 16:01 dong2\dong2\Debug\li
文件 2 2018-05-14 16:01 dong2\dong2\Debug\li
文件 2 2018-05-14 16:01 dong2\dong2\Debug\li
文件 2 2018-05-14 16:01 dong2\dong2\Debug\li
文件 2 2018-05-14 16:01 dong2\dong2\Debug\li
文件 2 2018-05-14 16:01 dong2\dong2\Debug\li
文件 2 2018-05-14 16:01 dong2\dong2\Debug\li
文件 2 2018-05-14 16:01 dong2\dong2\Debug\li
文件 2 2018-05-14 16:01 dong2\dong2\Debug\li
文件 2 2018-05-14 16:01 dong2\dong2\Debug\li
文件 2 2018-05-14 16:01 dong2\dong2\Debug\li
文件 2 2018-05-14 16:01 dong2\dong2\Debug\li
文件 2 2018-05-14 16:01 dong2\dong2\Debug\li
............此处省略80个文件信息
评论
共有 条评论