python和opencv构建运动检测器的实现

照着一个示例跑,目标本是捕获进入摄像头的第一帧然后会一直追踪这一个物体,如果出现的话会框出来,但是不知道什么原因,第一个框出来之后移动到别的地方还是会框别的东西,然后摄像头打开几秒就自动停止了还报错

import pandas

firstframe = None
status = [None,None]
df = pandas.DataFrame(columns=["start","end"])
cap = cv2.VideoCapture(1)
while True:
  check,colorframe = cap.read()
  status = 0
  gray = cv2.cvtColor(colorframe,cv2.COLOR_BGR2GRAY)
  gray = cv2.GaussianBlur(gray,(21,21),0) #高斯模糊去除噪声
  if firstframe is None:
    firstframe = gray
    continue #捕获第一个灰度帧 得到第一帧后不进行后续处理
  delta_frame = cv2.absdiff(firstframe,gray)
  # ,我们需要找出第一帧和当前帧之间的区别。因此,我们使用absdiff函数并将得到的结果称为delta帧。对于我们的用例来说,仅仅找到一个差异是不够的,所以我们需要定义一个像素阈值,它可以被视为真实的对象。我们可以选择30像素作为标准阈值,并将标准阈值的颜色定义为白色(颜色代码:255). 二元阈值函数THRESH_BINARY返回一个元组值,其中只有第二项([0]是第一项,[1]是第二项)包含生成的阈值帧。二元阈值函数用于处理含有2个离散值的非连续函数:如0或1。如果摄影机前面没有对象,我们将当前帧的状态视为0;如果摄影机前面存在对象,则将当前帧的状态视为1。 

  thresh_frame = cv2.threshold(delta_frame,30,255,cv2.THRESH_BINARY)[1]
  thresh_frame = cv2.dilate(thresh_frame,None,iterations=3)
  # 在膨胀函数Dilate中,我们可以通过设置迭代次数来设置平滑度。迭代次数越多,平滑度越高,处理时间也就越长。因此,建议保持标准化设置为3。膨胀函数中的“None”参数表示我们的应用中不需要元素结构。 

#声明元组的语法 (cnts,_)
  (cnts,_) = cv2.findContours(thresh_frame.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
  for contours in cnts :
    if cv2.contourArea(contours) < 10000:
      continue
    if cv2.contourArea(contours) < 20000:
     status = 1
     (x,y,w,h) = cv2.boundingRect(contours)
     cv2.rectangle(colorframe,(x,y),(x+w,y+h),(0,0,255),3)
     cv2.imshow("cc",colorframe)
  key = cv2.waitKey(1)
  if key == ord('q'):
    break

显然这里有什么问题。
留待解决:高斯平滑参数的获取

到此这篇关于python和opencv构建运动检测器的实现的文章就介绍到这了,更多相关python opencv构建运动检测器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Opencv二帧差法检测运动目标与提取轮廓

    Opencv学习之二帧差法运动目标检测与轮廓提取 ,供大家参考,具体内容如下 代码是从网上摘抄学习的,加了好多注释,感觉就像边看书边做笔记一样,给人以满足的享受.Let's do this! #include "highgui.h" #include "cv.h" #include "stdio.h" #include <time.h> #include <math.h> #include <string.h>

  • Opencv光流运动物体追踪详解

    光流的概念是由一个叫Gibson的哥们在1950年提出来的.它描述是空间运动物体在观察成像平面上的像素运动的瞬时速度,利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法.那么所说的光流到底是什么? 简单来说,上图表现的就是光流,光流描述的是图像上每个像素点的灰度的位置(速度)变化情况,光流的研究是利用图像序列中的像素强度数据的时域变化和相关性来确定各自像素位置的"运动".研究光流场的目的就是为了从

  • Opencv+Python实现图像运动模糊和高斯模糊的示例

    运动模糊:由于相机和物体之间的相对运动造成的模糊,又称为动态模糊 Opencv+Python实现运动模糊,主要用到的函数是cv2.filter2D(): # coding: utf-8 import numpy as np import cv2 def motion_blur(image, degree=12, angle=45): image = np.array(image) # 这里生成任意角度的运动模糊kernel的矩阵, degree越大,模糊程度越高 M = cv2.getRotat

  • OpenCV实现帧差法检测运动目标

    今天的目标是用OpenCV实现对运动目标的检测,这里选用三帧帧差法.代码如下: #include <opencv2/opencv.hpp> #include <cv.h> #include <highgui.h> #include <stdio.h> #include <ctype.h> double Threshold_index=0; const int CONTOUR_MAX_AERA = 200; void trackbar(int po

  • OpenCV利用背景建模检测运动物体

    本文实例为大家分享了OpenCV利用背景建模检测运动物体的具体代码,供大家参考,具体内容如下 #include <opencv\highgui.h> #include <stdio.h> int main( int argc, char** argv ){ IplImage* pFrame = NULL; IplImage* pFrImg = NULL; IplImage* pBkImg = NULL; CvMat* pFrameMat = NULL; CvMat* pFrMat

  • 基于OpenCv的运动物体检测算法

    基于一个实现的基于OpenCv的运动物体检测算法,可以用于检测行人或者其他运动物体. #include <stdio.h> #include <cv.h> #include <cxcore.h> #include <highgui.h> int main( int argc, char** argv ) //声明IplImage指针 IplImage* pFrame = NULL; IplImage* pFrImg = NULL; IplImage* pBk

  • python opencv实现运动检测

    本文实例为大家分享了python opencv运动检测的具体代码,供大家参考,具体内容如下 # -*- coding:utf-8 -*- __author__ = 'kingking' __version__ = '1.0' __date__ = '14/07/2017' import cv2 import numpy as np import time camera = cv2.VideoCapture(0) # 参数0表示第一个摄像头 # 判断视频是否打开 if (camera.isOpen

  • Python+OpenCV目标跟踪实现基本的运动检测

    目标跟踪是对摄像头视频中的移动目标进行定位的过程,有着非常广泛的应用.实时目标跟踪是许多计算机视觉应用的重要任务,如监控.基于感知的用户界面.增强现实.基于对象的视频压缩以及辅助驾驶等. 有很多实现视频目标跟踪的方法,当跟踪所有移动目标时,帧之间的差异会变的有用:当跟踪视频中移动的手时,基于皮肤颜色的均值漂移方法是最好的解决方案:当知道跟踪对象的一方面时,模板匹配是不错的技术. 本文代码是做一个基本的运动检测 考虑的是"背景帧"与其它帧之间的差异 这种方法检测结果还是挺不错的,但是需要

  • python和opencv构建运动检测器的实现

    照着一个示例跑,目标本是捕获进入摄像头的第一帧然后会一直追踪这一个物体,如果出现的话会框出来,但是不知道什么原因,第一个框出来之后移动到别的地方还是会框别的东西,然后摄像头打开几秒就自动停止了还报错 import pandas firstframe = None status = [None,None] df = pandas.DataFrame(columns=["start","end"]) cap = cv2.VideoCapture(1) while Tru

  • 使用Python中OpenCV和深度学习进行全面嵌套边缘检测

    这篇博客将介绍如何使用OpenCV和深度学习应用全面嵌套的边缘检测.并将对图像和视频流应用全面嵌套边缘检测,然后将结果与OpenCV的标准Canny边缘检测器进行比较. 1. 效果图 愤怒的小鸟--原始图 VS Canny边缘检测图 VS HED边缘检测图 花朵--原始图 VS Canny边缘检测图 VS HED边缘检测图 视频效果图GIF 如下 2. 全面嵌套边缘检测与Canny边缘检测 2.1 Hed与Canny边缘检测对比 Holistically-Nested Edge Detectio

  • 超详细注释之OpenCV Haar级联检测器进行面部检测

    目录 1. 效果图 2. 原理 2.1 Haar级联是什么? 2.2 Haar级联的问题与局限性 2.3 Haar级联预训练的模型 3. 源码 3.1 图像检测 3.2 实时视频流检测 参考 这篇博客将介绍如何使用预训练好的OpenCV Haar级联人脸.眼睛.嘴部检测器,并将它们应用于图片及实时视频流的检测. 人脸检测结果是最稳定和准确的.不幸的是,在许多情况下,眼睛检测和嘴巴检测结果是不可用的--对于面部特征/部分提取,强烈建议使用python,dlib,OpenCV提取眼睛,鼻子,嘴唇及下

  • Python使用OpenCV实现虚拟缩放效果

    目录 介绍 要求 目标 构建 结论 介绍 OpenCV 彻底改变了整个图像处理领域.从图像分类到对象检测,我们不仅可以使用 OpenCV 库做一些很酷的事情,而且还可以构建一流的应用程序. 今天我们要实现一个有趣的东西,它是手机或电脑中的一种功能,即图像缩放.但在这里,它将是实时对帧上所需的图像进行虚拟缩放. 要求 对于这个项目,我们将使用 OpenCV 库和另一个名为 Cvzone 的库来使用虚拟缩放. CVZone 它是一个建立在 OpenCV 和 MediaPipe 之上的库.它使事情变得

  • 在树莓派2或树莓派B+上安装Python和OpenCV的教程

    我的Raspberry Pi 2昨天刚邮到,这家伙看上去很小巧可爱. 这小家伙有4核900MHZ的处理器,1G内存.要知道,Raspberry Pi 2 可比我中学电脑实验室里大多数电脑快多了. 话说,自从Raspberry Pi 2发布以来,我收到了很多请求,要求我能写一个在它上面安装OpenCV和Python的详细说明. 因此如果你想在Raspberry Pi启动运行OpenCV和Python,就往下面看! 在博文的剩余部分,我将提供在Raspberry Pi 2 和Raspberry Pi

  • 利用Python和OpenCV库将URL转换为OpenCV格式的方法

    今天的博客是直接来源于我自己的个人工具函数库. 过去几个月,有些PyImageSearch读者电邮问我:"如何获取URL指向的图片并将其转换成OpenCV格式(不用将其写入磁盘再读回)".这篇文章我将展示一下怎么实现这个功能. 额外的,我们也会看到如何利用scikit-image从URL下载一幅图像.当然前行之路也会有一个常见的错误,它可能让你跌个跟头. 继续往下阅读,学习如何利用利用Python和OpenCV将URL转换为图像 方法1:OpenCV.NumPy.urllib 第一个方

  • Python+Dlib+Opencv实现人脸采集并表情判别功能的代码

    一.dlib以及opencv-python库安装 介于我使用的是jupyter notebook,所以在安装dlib和opencv-python时是在 这个命令行安装的 dlib安装方法: 1.若可以,直接使用上图所示命令行输入以下命令: pip install cmake pip install boost pip install dlib 若安装了visual studio2019应该就可以直接pip install dlib,至少我是这样 由于很多在执行第三句时都会报错,所以这里提供第二种

  • python 用opencv实现图像修复和图像金字塔

    我们将学习如何通过一种称为修复的方法去除旧照片中的小噪音,笔画等.基本思路很简单:用相邻像素替换那些坏标记,使其看起来像邻域. cv2.inpaint() cv2.INPAINT_TELEA cv2.INPAINT_NS import numpy as np import cv2 as cv img = cv.imread('messi_2.jpg') mask = cv.imread('mask2.png',0) dst = cv.inpaint(img,mask,3,cv.INPAINT_T

  • python 基于opencv实现高斯平滑

    假设一个列数为W,行数为H的高斯卷计算子gaussKernel,其中W,H均为奇数,描点位置在((H-1)/2 ,(W-1)/2),构建高斯卷积核的步骤如下 1.计算高斯矩阵 2.计算高斯矩阵的和 3.高斯矩阵除以其本身的和,也就是归一化 下面利用Python来实现构建高斯卷积算子 def getGaussKernel(sigma, H, W): r, c = np.mgrid[0:H:1, 0:W:1] r -= (H - 1) / 2 c -= (W - 1) / 2 gaussMatrix

  • Python使用Opencv实现边缘检测以及轮廓检测的实现

    边缘检测 Canny边缘检测器是一种被广泛使用的算法,并被认为是边缘检测最优的算法,该方法使用了比高斯差分算法更复杂的技巧,如多向灰度梯度和滞后阈值化. Canny边缘检测器算法基本步骤: 平滑图像:通过使用合适的模糊半径执行高斯模糊来减少图像内的噪声. 计算图像的梯度:这里计算图像的梯度,并将梯度分类为垂直.水平和斜对角.这一步的输出用于在下一步中计算真正的边缘. 非最大值抑制:利用上一步计算出来的梯度方向,检测某一像素在梯度的正方向和负方向上是否是局部最大值,如果是,则抑制该像素(像素不属于

随机推荐