opencv运动物体识别

import cv2
import time
import datetime
import os def mkdir(path):
folder = os.path.exists(path) if not folder: # 判断是否存在文件夹如果不存在则创建为文件夹
os.makedirs(path) # makedirs 创建文件时如果路径不存在会创建这个路径
("--- new folder... ---")
("--- OK ---") else:
("--- There is this folder! ---") file = "D:\\CCTVlook" # 保存位置
mkdir(file)
print("文件储存于D:\\CCTVlook")
# 选取摄像头,0为笔记本内置的摄像头,1,2···为外接的摄像头
camera = cv2.VideoCapture(0) time.sleep(5) # 延迟5s执行
background = None # 初始化背景 def nothing(x):
pass cv2.namedWindow("fps") # 新建一个窗口
cv2.createTrackbar("level", "fps", 21, 255, nothing) # 新建阈值滑动条
shot_idx = 0 while True:
text = "No Target"
flat = 0
# 滑动条赋值
kerne = cv2.getTrackbarPos("level", "fps")
if kerne % 2 == 0:
kerne = kerne + 1 # 解决滑动条赋值到高斯滤波器是偶数异常抛出
(grabbed, frame) = camera.read()
# 对帧进行预处理,先转灰度图,再进行高斯滤波。
# 用高斯滤波对图像处理,避免亮度、震动等参数微小变化影响效果
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (kerne, kerne), 0)
# 将第一帧设置为整个输入的背景
if background is None:
background = gray
continue
# 当前帧和第一帧的不同它可以把两幅图的差的绝对值输出到另一幅图上面来
frameDelta = cv2.absdiff(background, gray)
# 二值化
thresh = cv2.threshold(frameDelta, 25, 255, cv2.THRESH_BINARY)[1]
# 腐蚀膨胀
thresh = cv2.dilate(thresh, None, iterations=2)
# 取轮廓
cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[
-2
]
# 遍历轮廓
for c in cnts:
if cv2.contourArea(c) < 1800: # 对于较小矩形区域,选择忽略
continue
flat = 1 # 设置一个标签,当有运动的时候为1
# 计算轮廓的边界框,在当前帧中画出该框
(x, y, w, h) = cv2.boundingRect(c)
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
text = "Find Target! save as D:\CCTVlook"
print("Find Target!")
cv2.putText(frame, text, (10, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
cv2.putText(
frame,
datetime.datetime.now().strftime("%A %d %B %Y %I:%M:%S%p"),
(10, frame.shape[0] - 10),
cv2.FONT_HERSHEY_SIMPLEX,
0.35,
(0, 0, 255),
1,
)
# cv2.imshow("Frame Delta", frameDelta) cv2.imshow("fps", frame)
# cv2.imshow("Thresh", thresh) key = cv2.waitKey(1) & 0xFF # 如果q键被按下,跳出循环
ch = cv2.waitKey(1)
if key == ord("q"):
break if flat == 1: # 设置一个标签,当有运动的时候为1
fn = "D:\CCTVlook\shot%d.jpg" % (shot_idx)
cv2.imwrite(fn, frame)
shot_idx += 1
continue
原文:https://blog.csdn.net/dgut_guangdian/article/details/79762409
opencv运动物体识别的更多相关文章
- opencv学习之路(37)、运动物体检测(二)
一.运动物体轮廓椭圆拟合及中心 #include "opencv2/opencv.hpp" #include<iostream> using namespace std ...
- 【图像处理】openCV光流法追踪运动物体
openCV光流法追踪运动物体 email:chentravelling@163.com 一.光流简单介绍 摘自:zouxy09 光流的概念是Gibson在1950年首先提出来的.它是空间运动物体在观 ...
- OpenCV.物体识别
1.度娘:“OpenCV 物体识别” 1.1.opencv实时识别指定物体 - 诺花雨的博客 - CSDN博客.html(https://blog.csdn.net/qq_27063119/artic ...
- OpenCV开发笔记(七十三):红胖子8分钟带你使用opencv+dnn+yolov3识别物体
前言 级联分类器的效果并不是很好,准确度相对深度学习较低,上一章节使用了dnn中的tensorflow,本章使用yolov3模型,识别出具体的分类. Demo 320x320,置信度0 ...
- 手把手教你使用LabVIEW OpenCV dnn实现物体识别(Object Detection)含源码
前言 今天和大家一起分享如何使用LabVIEW调用pb模型实现物体识别,本博客中使用的智能工具包可到主页置顶博客LabVIEW AI视觉工具包(非NI Vision)下载与安装教程中下载 一.物体识别 ...
- 基于opencv3.0下的运动车辆识别
在opencv的初等应用上,对运动物体的识别主要有帧差或背景差两种方式. 帧差法主要的原理是当前帧与前一帧作差取绝对值: 背景差主要的原理是当前帧与背景帧作差取绝对值: 在识别运动车辆上主要需要以下9 ...
- 使用OpenCV进行人脸识别
不断维护的地址:http://plzcoding.com/face-recognition-with-opencv/ 怎样使用OpenCV进行人脸识别 本文大部分来自OpenCV官网上的Face Re ...
- MATLAB 物体识别算法说明:vision.ForegroundDetector, vision.BlobAnalysis
在官方示例中,Motion-Based Multiple Object Tracking和Using Kalman Filter for Object Tracking都使用了下面两个算法进行物体的识 ...
- 谷歌开源的TensorFlow Object Detection API视频物体识别系统实现教程
视频中的物体识别 摘要 物体识别(Object Recognition)在计算机视觉领域里指的是在一张图像或一组视频序列中找到给定的物体.本文主要是利用谷歌开源TensorFlow Object De ...
随机推荐
- shell脚本中 “set -e” 的作用
#!/bin/bash set -e command 1command 2 每个脚本都应该在文件开头加上set -e,这句语句告诉bash如果任何语句的执行结果不是true则应该退出.这样的好处是防止 ...
- python面向对象之练习题2
练习题 需求: 士兵 可以 花钱买一个AK47 士兵 可以 用开开火 士兵 可以 买弹夹 士兵 可以 上子弹 士兵 可以 给 枪 添加子弹 枪 需要弹夹和有子弹的情况下,借助士兵扣动扳机 才能开火 枪 ...
- 从0开始完成SpringBoot+Mybatis实现增删改查
1.准备知识: 1)需要掌握的知识: Java基础,JavaWeb开发基础,Spring基础(没有Spring的基础也可以,接触过Spring最好),ajax,Jquery,Mybatis. 2)项目 ...
- HttpServletRequest 或 HttpServletResponse显示红色,需引用的依赖包:servlet-api.jar
解决方法:
- java小项目之:抽奖系统!java初学者必备(内附源码)
[Java]Java摇奖源码,Java抽奖源码,Java随机抽奖源码 任务描述 本次任务要求为某商场开发一套幸运抽奖系统,客户必须首先注册成为该商场会员,会员登录成功后,就可以参加抽奖活动了.注册 用 ...
- Codeforces Round #199 (Div. 2) D. Xenia and Dominoes
把 'O' 看成 'X',然后枚举它的四个方向看看是否能放,然后枚举 $2^4$ 种可能表示每种方向是否放了,放了的话就标成 'X',就相当于容斥,对于新的图去dp. dp就是铺地砖,行用二进制来表示 ...
- 「CF5E」Bindian Signalizing
传送门 Luogu 解题思路 很显然的一点,任何一条可能成为路径的圆弧都不可能经过最高的点,除非这条路径全是最高点. 所以我们先把最大值抠掉,把剩下的按原来的顺序排好. 从前往后.从后往前扫两次,用单 ...
- 【高软作业4】:Tomcat 观察者模式解析 之 Lifecycle
一. 预备 如果你是Windows用户,使用Eclipse,并且想自行导入源码进行分析,你可能需要:Eclipse 导入 Tomcat 源码 如果你已遗忘 观察者模式,那么你可以通过该文章回顾:设计模 ...
- 前端学习笔记系列一:4 vue中@click.native
.native - listen for a native event on the root element of component. 作用:[给组件绑定原生事件] 例子:如果使用router-l ...
- SSH框架搭建 笔记 (含spring注解驱动)
分类: web 开发2014-04-27 12:33 354人阅读 评论(0) 收藏 举报 框架springinterface注解 好久没有搭建框架了,今天整理下以前的知识,整合下SSH,没想到手生了 ...