OpenCV动态人物识别代码

news/2024/10/31 4:16:34/

动态人物识别代码


int main()
{// 打开视频文件或摄像头VideoCapture cap("vtest.avi");// VideoCapture cap(0);  // 使用默认摄像头if (!cap.isOpened()){std::cout << "无法打开视频文件或摄像头流" << std::endl;return -1;}// 读取第一帧Mat prevFrame,prevGray;cap >> prevFrame;prevGray = Mat(prevFrame.size(), CV_8UC1, Scalar(255));int kk = 0;while (true){Mat nextFrame, nextGray;cap >> nextFrame;if (nextFrame.empty())break;// 将当前帧与背景帧进行差分Mat diff;absdiff(prevFrame, nextFrame, diff);// 将差分图像转换为灰度图像Mat gray;cvtColor(diff, gray, COLOR_BGR2GRAY);GaussianBlur(gray, gray, Size(9, 9), 2, 2);  //平滑滤波// 对灰度图像进行阈值处理threshold(gray, nextGray, 30, 255, THRESH_BINARY);//当前二值化图像  --  (上一张和当前图像的二值化图像) 与 (下一张和当前图像的二值化图像)Mat currentGray;bitwise_and(prevGray, nextGray, currentGray);// 对二值图像进行膨胀操作,以填充物体区域Mat dilated;Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));dilate(currentGray, dilated, kernel, Point(-1, -1), 3);//生成随机颜色,用于区分不同连通域RNG rng(10086);Mat out, stats, centroids;//统计图像中连通域的个数int number = connectedComponentsWithStats(dilated, out, stats, centroids, 8, CV_16U);vector<Vec3b> colors;for (int i = 0; i < number; i++){//使用均匀分布的随机数确定颜色Vec3b vec3 = Vec3b(rng.uniform(0, 256), rng.uniform(0, 256), rng.uniform(0, 256));colors.push_back(vec3);}//以不同颜色标记出不同的连通域Mat result = Mat::zeros(prevFrame.size(), CV_8UC3);int w = result.cols;int h = result.rows;for (int i = 1; i < number; i++){// 中心位置int center_x = centroids.at<double>(i, 0);int center_y = centroids.at<double>(i, 1);//矩形边框int x = stats.at<int>(i, CC_STAT_LEFT);int y = stats.at<int>(i, CC_STAT_TOP);int w = stats.at<int>(i, CC_STAT_WIDTH);int h = stats.at<int>(i, CC_STAT_HEIGHT);int area = stats.at<int>(i, CC_STAT_AREA);if (area < 500){continue;}// 外接矩形Rect rect(x, y, w, h);rectangle(prevFrame, rect, colors[i],2);}// 寻找轮廓//std::vector<std::vector<Point>> contours;//std::vector<Vec4i> hierarchy;//findContours(dilated, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);// 绘制检测到的轮廓//for (size_t i = 0; i < contours.size(); i++)//{//	if (minAreaRect(contours[i]).boundingRect().area()< 500)  // 设置最小轮廓面积以过滤噪声//		continue;//	Rect boundingRect1 = boundingRect(contours[i]);//	rectangle(prevFrame, boundingRect1, Scalar(0, 255, 0), 2);//}// 显示结果帧imshow("Motion Detection", prevFrame);// 按下ESC键退出循环if (waitKey(1) == 27)break;//用作下一个循环做对比prevGray = nextGray;prevFrame = nextFrame;}// 释放资源并关闭窗口cap.release();destroyAllWindows();return 0;
}

在这里插入图片描述


http://www.ppmy.cn/news/595565.html

相关文章

JQ/CSS禁止浏览器复制粘贴、右键、F12

一、CSS 在body里写下以下内容可禁止复制 body{-moz-user-select: none; /*火狐*/-webkit-user-select: none; /*webkit浏览器*/-ms-user-select: none; /*IE10*/-khtml-user-select: none; /*早期浏览器*/user-select: none; } 二、JQ 在JS里写以下内容可禁止右键和F12 $(…

vscode 加上c++11编译选项

问题描述 vscode 运行C11代码出现此错误 error This file requires compiler and library support for the ISO C 2011 standard. This support must be enabled with the -stdc11 or -stdgnu11 compiler options. 提示我们需要在编译命令中加一行选项&#xff0c;加入c11编译…

8 系统定时器(Systick)

目录 系统定时器&#xff08;Systick&#xff09; SysTick定时器特性介绍 SysTick定时器的功能 SysTick定时器寄存器介绍 Systick定时器的使用 系统定时器&#xff08;Systick&#xff09; SysTick定时器特性介绍 计数宽度&#xff1a; 24bit来存储数据&#xff0c;2^24…

电脑开机提示CPU Fan Error处理方法

1、系统BIOS检测不到CPU风扇的转速 这个是最常见的原因之一&#xff0c;我们可以进BIOS查看&#xff0c;开机后按下DEL键进入BIOS选项&#xff0c;接着进入Power→Hardware monitor&#xff0c;我们会看到有三个选项CPU FAN SPEED&#xff1b;CHASSIS FANSPEED&#xff1b;POWE…

基于Arduino的温控风扇

概述 基于Arduino的温控风扇系统&#xff0c;经DS18B20温度采集&#xff0c;将数据传送到Arduino&#xff0c;通过PWM调节占空比进而控制电机转速&#xff0c;经过驱动电路驱动电机&#xff0c;由电机的计数模块得到电机转速并用LCD1602显示。 设计方案 高电平时电压为U,占空…

计算机慢的解决方法,妹子告诉你:电脑慢的原因及快速解决办法

原标题&#xff1a;妹子告诉你:电脑慢的原因及快速解决办法 作为一名自诩电脑砖家的小编&#xff0c;总是会被妹子们各种各样电脑问题所雷倒。妹子们不按正确的方式使用电脑&#xff0c;频出的电脑硬件和软件问题&#xff0c;要比男生多得多。据网上调查显示&#xff0c;女生普…

ChatGPT最新版实现多样化聚合文章的批量生成文章

随着人工智能技术的不断发展&#xff0c;ChatGPT最新版在多样化聚合文章的批量生成方面取得了重要突破。本文将从随机选取的8个方面&#xff0c;对ChatGPT最新版的构建思想进行详细阐述。这些方面包括&#xff1a;自然语言处理、大规模数据集、迁移学习、多模态输入、生成模型优…

服务器系统反应慢是什么原因,服务器反应慢是什么原因

网站流量跑起来的时候,硬盘读写量非常大&#xff0c;你的问题主要出在硬盘上。这样的例子很常见啊&#xff0c;如以前住宾馆的时候&#xff0c;那里的电脑配置比较低&#xff0c;但是晚上的网速比较快&#xff0c;用迅雷随便都可以达到5M/S。快吧&#xff0c;但是这时候其它什么…