第12课 利用openCV检测物体是否运动了

 FFmpeg与openCV绝对是绝配。前面我们已经基本熟悉了FFmpeg的工作流程,这一章我们重点来看看openCV。

在前面,我们已经使用openCV打开过摄像头并在MFC中显示图像,但openCV能做的要远超你的想像,比如可以用它来实现人脸检测、车牌识别等,在AI领域,openCV早已声名鹊起。

在实际应用中,我们常需要判断物体是否运动了,这可以利用openCV实现。

1.复制demo4并改名为demo12。

2.修改capCam函数:

int fmle::capCam() {
	videoCap.open(0);	
	cv::Mat frame1, frame2;
	BOOL ifSuccess = videoCap.read(frame1);
	while (true)
	{
		BOOL ifSuccess = videoCap.read(frame2);
		cv::Mat diff;
		cv::absdiff(frame1, frame2, diff); // 计算两帧图像的差异
		cv::Mat gray;
		cv::cvtColor(diff, gray, cv::COLOR_BGR2GRAY); // 转换为灰度图像
		cv::Mat blurred;
		cv::GaussianBlur(gray, blurred, cv::Size(5, 5), 0); // 高斯模糊
		cv::Mat thresholded;
		cv::threshold(blurred, thresholded, 20, 255, cv::THRESH_BINARY); // 二值化
		cv::Mat dilated;
		cv::dilate(thresholded, dilated, cv::Mat(), cv::Point(-1, -1), 2); // 膨胀
		std::vector<std::vector<cv::Point>> contours;
		cv::findContours(dilated, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE); // 查找轮廓
		bool objectMoved = false;
		for (const auto& contour : contours)
		{
			double area = cv::contourArea(contour);
			if (area > 1000) // 设置最小轮廓面积阈值
			{
				objectMoved = true;
				break;
			}
		}

		if (objectMoved)
		{
			TRACE("物体移动了\n");
			cv::putText(dilated, "Moving... ", cv::Point(0, 40), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(255, 255, 255), 2);			
		}
		else
		{
			cv::putText(dilated, "Stopping... ", cv::Point(0, 40), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(255, 255, 255), 2);
			TRACE("物体未移动\n");			
		}		
		frame1 = frame2.clone(); // 更新上一帧图像
		mainDlg->drawMatOfPub(dilated);
		Sleep(40);
	}	
	videoCap.release();	
	
	return 0;
}

3.调试运行,当手挥动时会显示Moving,停止时则显示Stoping。

相关推荐

  1. OpenCV识别视频中物体运动并截取保存

    2024-01-06 05:52:07       32 阅读
  2. pytorch运行物体检测模型 SSD

    2024-01-06 05:52:07       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-06 05:52:07       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-06 05:52:07       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-06 05:52:07       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-06 05:52:07       20 阅读

热门阅读

  1. 08、docker pull nacos/nacos-server慢解决方案

    2024-01-06 05:52:07       36 阅读
  2. 且看迥然不同的 diff

    2024-01-06 05:52:07       40 阅读
  3. office学习记录

    2024-01-06 05:52:07       42 阅读
  4. LeetCode 141

    2024-01-06 05:52:07       40 阅读
  5. tf-idf +逻辑回归来识别垃圾文本

    2024-01-06 05:52:07       38 阅读
  6. easycode 插件配置文件

    2024-01-06 05:52:07       33 阅读
  7. Linux上创建IntelliJ IDEA的快捷方式

    2024-01-06 05:52:07       30 阅读
  8. nginx服务window开机自启动

    2024-01-06 05:52:07       45 阅读
  9. Lambda表达式

    2024-01-06 05:52:07       32 阅读
  10. oracle23c安装部署centos8.3

    2024-01-06 05:52:07       38 阅读