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 ...
随机推荐
- A Simple Problem with Integers-POJ3468 区间修改+区间查询
题意: 给你n个数和2个操作,C操作是将一个区间内的每个数都加上k,Q操作是询问一个区间的和 链接:http://poj.org/problem?id=3468 思路: 线段树区间修改+区间查询 代码 ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:将页面元素所包含的文本内容替换为背景图
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- P1095 解码PAT准考证
1095 解码PAT准考证 (25分) PAT 准考证号由 4 部分组成: 第 1 位是级别,即 T 代表顶级:A 代表甲级:B 代表乙级: 第 2~4 位是考场编号,范围从 101 到 999: ...
- pwn之偏移量offset
0x7fffffffdd00: 0x4141414141414141 0x4141414141414141 0x7fffffffdd10: 0x4141414141414141 0x414141414 ...
- IAR STM32F10x_StdPeriph_Driver 3.4转3.6.1库
1.Fatal Error[Pe1696]: cannot open source file core_cmInstr.h STM32F10x_StdPeriph_Driver 3.4库移植换成3.6 ...
- java学习-循环结构-查找算法-顺序查找
今天回顾了简单算法,顺序查找.发现了数组出现重复数字,无法输出第二个位置就跳出循环了. 利用所学知识解决了.放上代码,同时在代码里给大家分享思路. 欢迎大神教导,欢迎指正. ; System.out. ...
- 「NOIP2015」斗地主
传送门 Luogu 解题思路 给你们一张搜索顺序图,然后就大力模拟就好. 细节注意事项 爆搜题,你们懂的... 参考代码 写的有点丑了,洛谷上只能过加强版的88分,会T六个点 #include < ...
- lnmp1.5安装swoole
php7.2安装swoole-4.0.1.tgz php5.6安装swoole-1.10.4.tgz wget http://pecl.php.net/get/swoole-4.0.1.tgz ...
- redis提供的持久化机制(rdb,aof)
Redis提供的持久化机制 Redis是一种面向“key-value”类型数据的分布式NoSQL数据库系统,具有高性能.持久存储.适应高并发应用场景等优势.它虽然起步较晚,但发展却十分迅速. 近日,R ...
- leetcode206 Reverse Linked List
""" Reverse a singly linked list. Example: Input: 1->2->3->4->5->NULL ...