用python和OpenCV进行动态物体检测

此程序将摄像头录制的视频转化为灰度视频,在将压缩后灰度明显不同的区域用矩形框选起来,得到侦测结果。

  • 实现效果
  • 程序编写
    • 初始化,测试摄像头
    • 读取、转换视频
    • 对比转换后摄像头,设置坐标框选
    • 退出循环
  • 应用场景

实现效果

先测试摄像头宽、高度备用,再将视频进行灰度处理,后对视频进行形态学膨胀。接着对比处理过的视频,设定框选的x,y坐标,框选视频中对比强烈的部分,不断刷新,进行动态物体检测。

(程序流程图)

程序编写

本程序由Python编译器IDLE编写,需事先通过cmd安装OpenCV库(详细库安装方法见之前博客)

初始化,测试摄像头

先初始化各库,通过cv2打开摄像头,并测量摄像头拍摄范围的宽、高。

import cv2
import numpy as npcamera = cv2.VideoCapture(0)
if (camera.isOpened()):   print('Open')
else:print('摄像头未打开')size = (int(camera.get(cv2.CAP_PROP_FRAME_WIDTH)),int(camera.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print('size:'+repr(size))  es = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (9, 4))
kernel = np.ones((5, 5), np.uint8)
background = None

读取、转换视频

将视频进行灰度处理(变成黑白视频),再进行形态学膨胀,得到对比度更明显的视频。

while True:grabbed, frame_lwpCV = camera.read()gray_lwpCV = cv2.cvtColor(frame_lwpCV, cv2.COLOR_BGR2GRAY)gray_lwpCV = cv2.GaussianBlur(gray_lwpCV, (21, 21), 0)if background is None:background = gray_lwpCVcontinuediff = cv2.absdiff(background, gray_lwpCV)diff = cv2.threshold(diff, 25, 255, cv2.THRESH_BINARY)[1] diff = cv2.dilate(diff, es, iterations=2)

对比转换后摄像头,设置坐标框选

在获得高对比度的视频后,对转换后视频有区别的地方获取x,y坐标,再框选此坐标。

image, contours, hierarchy = cv2.findContours(diff.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for c in contours:if cv2.contourArea(c) < 4000: continue(x, y, w, h) = cv2.boundingRect(c) cv2.rectangle(frame_lwpCV, (x, y), (x+w, y+h), (0, 255, 0), 2)cv2.imshow('contours', frame_lwpCV)cv2.imshow('dis', diff)

退出循环

设置按键退出此循环

key = cv2.waitKey(1) & 0xFFif key == ord('q'):break
camera.release()
cv2.destroyAllWindows()

总程序

总程序已上传

import cv2
import numpy as npcamera = cv2.VideoCapture(0)
if (camera.isOpened()):print('Open')
else:print('摄像头未打开')size = (int(camera.get(cv2.CAP_PROP_FRAME_WIDTH)),int(camera.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print('size:'+repr(size))es = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (9, 4))
kernel = np.ones((5, 5), np.uint8)
background = Nonewhile True:grabbed, frame_lwpCV = camera.read()gray_lwpCV = cv2.cvtColor(frame_lwpCV, cv2.COLOR_BGR2GRAY)gray_lwpCV = cv2.GaussianBlur(gray_lwpCV, (21, 21), 0)if background is None:background = gray_lwpCVcontinue  diff = cv2.absdiff(background, gray_lwpCV)diff = cv2.threshold(diff, 25, 255, cv2.THRESH_BINARY)[1] diff = cv2.dilate(diff, es, iterations=2)image, contours, hierarchy = cv2.findContours(diff.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for c in contours:if cv2.contourArea(c) < 4000: continue(x, y, w, h) = cv2.boundingRect(c) cv2.rectangle(frame_lwpCV, (x, y), (x+w, y+h), (0, 255, 0), 2)cv2.imshow('contours', frame_lwpCV)cv2.imshow('dis', diff)key = cv2.waitKey(1) & 0xFFif key == ord('q'):break
camera.release()
cv2.destroyAllWindows()

应用场景

运动物体检测可以和第一期的智能监控结合(不知道的可以看下我的博客),也可将此与图像识别技术结合,做一些智能家居、检测应用。

用python和OpenCV进行动态物体检测相关推荐

  1. Python基于OpenCV的异常行为检测系统[源码&部署教程]

    1.项目背景 智能视频监控(Intelligent Video Surveillance , IVS)[1.2·3.4是计算机视觉技术5l在安防领域的应用,实现了由"被动监控"到& ...

  2. Python基于OpenCV监控老鼠蟑螂检测系统[完整源码&部署教程]

    1.视频演示: [项目分享]Python基于OpenCV监控老鼠蟑螂检测系统[完整源码&部署教程]_哔哩哔哩_bilibili 2.图片演示: 3.明厨亮灶: 餐饮企业的厨房卫生状况一直饱受消 ...

  3. IoT: Win10+Tensorflow+OpenCV+IPCamera 实时视频物体检测

    IoT: Win10+Tensorflow+OpenCV+IPCamera 实时视频物体检测 环境配置 Python3.5 既然是windows下用python,那就不要作死自己弄环境了,直接用ana ...

  4. 使用Python,OpenCV和Hough圆检测图像中的圆

    使用Python,OpenCV和Hough圆检测图像中的圆 1. 效果图 2. cv2.HoughCircles(image, method, dp, minDist) 3. 源码 参考 前几篇博客中 ...

  5. Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]

    1.图片演示 2.视频演示 [项目分享]Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]_哔哩哔哩_bilibili 3.检测方法 1)方法 与用于计算眨眼的传统 ...

  6. 利用opencv进行移动物体检测

    进行运动物体检测就是将动态的前景从静态的背景中分离出来.将当前画面与假设是静态背景进行比较发现有明显的变化的区域,就可以认为该区域出现移动的物体.在实际情况中由于光照阴影等因素干扰比较大,通过像素直接 ...

  7. LSD 用python的opencv来做线检测

    问题:cv2.error: OpenCV(4.5.2) ...Implementation has been removed due original code license issues in f ...

  8. Python用opencv实现动态识别二维码,以及加强版Python GUI(图像用户界面编程)

    前言 关于动态识别二维码信息,利用电脑摄像头动态扫描二维码,扫描视频中的二维码. 简易程序 import cv2 pip install opencv-pythondef start():captur ...

  9. JAVA物体运动检测_基于OpenCv的运动物体检测算法

    #include #include #include #include int main( int argc, char** argv ) //声明IplImage指针 IplImage* pFram ...

  10. (202103更新)海康威视网络摄像头sdk python版 (报错排查) 移动物体检测 多通道海康威视网洛摄像头后台检测 海康威视网络摄像头Python SDK

    海康威视网络摄像头Python SDK+移动物体位置检测 文末附 海康威视网络摄像头Python SDK 下载链接 本文参考博客 https://blog.csdn.net/c20081052/art ...

最新文章

  1. ubuntu mysql emma_Ubuntu 11.10 MySQL客户端 Emma 6.0 中文乱码解决办法
  2. gitee提交代码_在Gitee获8.5k Star,做微信小程序商城看这一个开源项目就够了
  3. initialProps被React-Navigation的navigation属性覆盖解决方案
  4. html调用js函数_Java Web初学者探索学习笔记10—网络API的js数据接口调用解决方案...
  5. 开发工具:Git超全实用技巧,值得收藏!
  6. [周赛][Leetcode][第5457题][JAVA][动态规划][和为奇数的子数组数目]
  7. 解决从其它搜索引擎不能直接访问百度页面的问题
  8. linux查看端口属性,linux如何查看系统属性指令?
  9. tl r402路由器设置_记一次TP-LINK路由器问题排查
  10. 人工智能/数据科学比赛汇总 2019.4
  11. 照片看3秒就销毁的软件_3.9秒破百,比亚迪汉EV到店实拍:实车比照片更好看
  12. 机器学习中常用的优化算法:
  13. 海康VisionMaster算法平台介绍
  14. 调用发票管理系统的方法2
  15. 原生js实现网站倒计时效果 给网站添加一个活动倒计时效果 线报活动结束提示效果
  16. Can总线dbc文件解析代码
  17. 漫威十年,好莱坞的转型焦虑
  18. 一键端服务器维护,游戏服务器一键端
  19. 无线鼠标 桌面服务器,你可能不知道 桌面总是乱糟糟的很可能是因为你没买对鼠标...
  20. 【EE308FZ Lab2-1】Android App for Bobing (Prototype)

热门文章

  1. 谷歌浏览器利用开发者工具截取长图
  2. 小程序实现tab切换
  3. 文本溢出处理,出现省略号,单行文本溢出处理,多行文本溢出处理
  4. MySQL 数据库备份与还原
  5. Python之struct详解
  6. js如何获取一个object的第一个数据
  7. 问的书写规则是什么意思_汉字书写规则
  8. Spider爬虫笔记[更新中...]
  9. [Storage]RPM series linux rescan disk / RPM系Linux重新扫描硬盘
  10. 【UVM基础】+uvm_set_verbosity 使用介绍