精华内容
下载资源
问答
  • opencv追踪运动的物体
    千次阅读
    2022-04-21 21:05:24

    目前感觉,利用opencv实现的物体追踪,关键要设置好你所检测对象的area,不然很容易出现混乱。本人也是自学,敬请批评指正。

    import cv2
    
    # 定义运算的核算子
    BLUR_RADIUS = 21
    erode_kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
    dilate_kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (9, 9))
    
    # 打开摄像头
    cap = cv2.VideoCapture(0)
    success, frame = cap.read()
    
    # 丢弃9帧,让相机有足够时间调整
    for i in range(9):
        success, frame = cap.read()
        if not success:
            exit(1)
    
    # 取第十帧,并进行模糊操作,作为背景
    gray_background = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    gray_background = cv2.GaussianBlur(gray_background, (BLUR_RADIUS, BLUR_RADIUS), 0)
    
    # 有了背景的参考图像,开始检测物体,对每一帧转成灰度和高斯模糊
    success, frame = cap.read()
    frame = cv2.flip(frame, 1)
    while success:
        gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        gray_frame = cv2.GaussianBlur(gray_frame, (BLUR_RADIUS, BLUR_RADIUS), 0)
    
        # 对两张图片进行差值的绝对值操作
        diff = cv2.absdiff(gray_background, gray_frame)
        _, thresh = cv2.threshold(diff, 40, 255, cv2.THRESH_BINARY)  # 阈值化操作得到黑白图像
    
        # 形态学运算进行平滑处理,便于后续边框的绘制
        cv2.erode(thresh, erode_kernel, thresh, iterations=2)
        cv2.dilate(thresh, dilate_kernel, thresh, iterations=2)
    
        # 先寻找轮廓
        contours, hier = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        for c in contours:
            # 排除轮廓太小的物体
            if cv2.contourArea(c) > 10000:
                x, y, w, h = cv2.boundingRect(c)
                cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 255, 0), 2)
    
        cv2.imshow("diff", diff)
        cv2.imshow("thresh", thresh)
        cv2.imshow("detection", frame)
    
        if cv2.waitKey(1) == 27:  # 按下esc键退出
            break
    
        success, frame = cap.read()
        cv2.flip(frame, 1)
    
    cap.release()
    cv2.destroyAllWindows()

    更多相关内容
  • 主要为大家详细介绍了Opencv光流运动物体追踪的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 内含代码可以检测运动物体,采用高斯混合模型算法提取前景
  • opencv-python运动物体位置追踪实验一.预备知识介绍①此实验的代码与颜色轨迹描绘实验的代码非常类似,本质还是通过颜色识别追踪运动物体的实时位置②cnt
  • 检测运动物体需要无运动物体的背景图像,所以,首先应用多帧像素平均值法提取了运动视频序列的背景图,从背景图像中分离目标像素,获取目标的质心坐标,并应用质心跟踪法以灰色图像序列为基础,对运动的目标进行实时...
  • Opencv光流运动物体追踪

    千次阅读 2016-09-27 20:53:51
    它描述是空间运动物体在观察成像平面上的像素运动的瞬时速度,利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。...

     

    光流的概念是由一个叫Gibson的大佬在1950年提出来的。它描述是空间运动物体在观察成像平面上的像素运动的瞬时速度,利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。那么所说的光流到底是什么鬼?

     

     

    简单来说,上图表现的就是光流,光流描述的是图像上每个像素点的灰度的位置(速度)变化情况,光流的研究是利用图像序列中的像素强度数据的时域变化和相关性来确定各自像素位置的“运动”。研究光流场的目的就是为了从图片序列中近似得到不能直接得到的运动场。
    光流法的前提假设:
    (1)相邻帧之间的亮度恒定;
    (2)相邻视频帧的取帧时间连续,或者,相邻帧之间物体的运动比较“微小”;
    (3)保持空间一致性;即,同一子图像的像素点具有相同的运动;

     

    Opencv中金字塔LK光流实现:
     

     

    #include "highgui/highgui.hpp"    
    #include "opencv2/nonfree/nonfree.hpp"  
    #include "opencv2/video/tracking.hpp"
    #include <iostream>
    
    using namespace cv;
    using namespace std;
    
    Mat image1,image2;
    vector<Point2f> point1,point2,pointCopy;
    vector<uchar> status;
    vector<float> err;
    
    int main(int argc,char *argv[])    
    {   
    	VideoCapture video(argv[1]); 
    	double fps=video.get(CV_CAP_PROP_FPS); //获取视频帧率  
    	double pauseTime=1000/fps; //两幅画面中间间隔  	
    	video>>image1;
    	Mat image1Gray,image2Gray;
    	cvtColor(image1,image1Gray,CV_RGB2GRAY);
    	goodFeaturesToTrack(image1Gray,point1,100,0.01,10,Mat());  
    	pointCopy=point1;
    	for(int i=0;i<point1.size();i++)    //绘制特征点位
    	{		
    		circle(image1,point1[i],1,Scalar(0,0,255),2);		
    	}	
    	namedWindow("角点特征光流",0);
    	imshow("角点特征光流",image1);
    	while(true)
    	{
    		video>>image2;
    		if(!image2.data||waitKey(pauseTime)==27)  //图像为空或Esc键按下退出播放  
    		{  
    			break;  
    		}  
    		cvtColor(image2,image2Gray,CV_RGB2GRAY);
    		calcOpticalFlowPyrLK(image1Gray,image2Gray,point1,point2,status,err,Size(20,20),3); //LK金字塔		
    		for(int i=0;i<point2.size();i++)
    		{
    			circle(image2,point2[i],1,Scalar(0,0,255),2);
    			line(image2,pointCopy[i],point2[i],Scalar(255,0,0),2);
    		}		
    		imshow("角点特征光流",image2);
    		swap(point1,point2);
    		image1Gray=image2Gray.clone();	
    	}	
    	return 0;    
    }  

     

     

     

    图像跟踪结果1:

     

     

    图像跟踪结果2:

     

    视频流跟踪:

     

    展开全文
  • 简单几行就可以实现对动态物体追踪,足见opencv在图像处理上的强大。python代码:import cv2import numpy as npcamera=cv2.VideoCapture(0)firstframe=Nonewhile True:ret,frame = camera.read()if not ret:...

    简单几行就可以实现对动态物体的追踪,足见opencv在图像处理上的强大。

    python代码:

    import cv2

    import numpy as np

    camera=cv2.VideoCapture(0)

    firstframe=None

    while True:

    ret,frame = camera.read()

    if not ret:

    break

    gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)

    gray=cv2.GaussianBlur(gray,(21,21),0)

    if firstframe is None:

    firstframe=gray

    continue

    frameDelta = cv2.absdiff(firstframe,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)

    x,y,w,h=cv2.boundingRect(thresh)

    frame=cv2.rectangle(frame,(x,y),(x+w,y+h),(0,0,255),2)

    cv2.imshow("frame", frame)

    cv2.imshow("Thresh", thresh)

    cv2.imshow("frame2", frameDelta)

    key = cv2.waitKey(1)&0xFF

    if key == ord("q"):

    break

    camera.release()

    cv2.destroyAllWindows()

    效果图

    201819101339530.gif?20180910145

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本网站。

    展开全文
  • opencv 视频运动物体检测

    热门讨论 2012-11-15 09:47:36
    opencv运动物体检测的代码,通过读取视频的每几帧,通过对比这几帧实现进行运动物体检测
  • opencv 运动物体跟踪

    2017-03-13 15:28:19
    opencv 运动物体跟踪,
  • OpenCV 物体跟踪

    千次阅读 2020-09-07 00:09:02
    明确任务 利用opencv知识,通过摄像头录像,实时提取带有某个特定颜色的物体,从而实现物体跟踪。 2.需要用到的函数 cv2.VideoCapture(0) 这个函数用来捕获视频,VideoCapture()中参数是0,表示打开笔记本的内置...

    声明

    声明:本系列博客是我在学习OpenCV官方教程中文版(For Python)(段力辉 译)所做的笔记。所以,其中的绝大部分内容引自这本书,博客中的代码也是其配套所附带的代码或书中的代码,侵删。其中部分代码可能会因需要而改动。在本系列博客中,其中包含书中的引用,也包括我自己对知识的理解,思考和总结。本系列博客的目的主要有两个,一个是可以作为我自己的学习笔记,时常复习巩固。第二个是可以为想学习python下的opencv 3 相关知识的朋友提供一些参考。

    正文

    1.明确任务

    利用opencv知识,通过摄像头录像,实时提取带有某个特定颜色的物体,从而实现物体跟踪。

    2.需要用到的函数

    • cv2.VideoCapture(0)
      这个函数用来捕获视频,VideoCapture()中参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频。,记得最后要用cap.release()来关闭摄像头。

    • ret,frame=cap.read()
      cap.read()按帧读取视频,ret,frame是cap.read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。

    • cv2.cvtColor(image,flag)
      这个函数是一个颜色空间转换函数,flag代表转换方式。

    • cv2.inRange()
      括号里有三个参数,依次是hsv,lower,upper,第一个参数:hsv指的是原图,第二个参数:lower指的是图像中低于这个lower的值,图像值变为0,第三个参数:upperd指的是图像中高于这个upper_red的值,图像值变为0,而在lower~upper之间的值变成255。

    • cv2.bitwise_and()
      bitwise_and()是对二进制数据进行“与”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“与”操作,1&1=1,1&0=0,0&1=0,0&0=0

    3.完整代码

    import cv2
    import numpy as np
    
    cap=cv2.VideoCapture(0)
    while(1):
    # 获取每一帧
        ret,frame=cap.read()
    # 转换到 HSV
        hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
    # 设定颜色的阈值
        lower_red=np.array([0,43,46])
        upper_red=np.array([10,255,255])
    # 根据阈值构建掩模
        mask=cv2.inRange(hsv,lower_red,upper_red)
    # 对原图像和掩模进行位运算
        res=cv2.bitwise_and(frame,frame,mask=mask)
    # 显示图像
        cv2.imshow('frame',frame)
        cv2.imshow('mask',mask)
        cv2.imshow('res',res)
        k=cv2.waitKey(5)&0xFF
        if k==27:
            break
    cap.release()    #关闭摄像头
    # 关闭窗口
    cv2.destroyAllWindows()
    
    

    运行结果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    (当时截图时没截好,所以原始图片与前两张不一样)

    4.另外

    怎样找到要跟踪对象的 HSV 值?
    只需要以下代码就可以轻松获得你需要的HSV值:

    import cv2
    import numpy as np
    
    #假设我们想得到绿色的HSV值
    green=np.uint8([[[0,255,0]]])#注意:是RGB,而不是BGR,还有这里是三层括号
    hsv_green=cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
    print(hsv_green)
    
    

    运行结果:

    [[[ 60 255 255]]]
    

    得到这个值后,现在你可以分别用 [H-100,100,100] 和 [H+100,255,255] 做上下阈值。

    感谢观看!

    如有错误,欢迎批评指正!

    展开全文
  • OpenCV 移动追踪

    2018-06-07 19:51:48
    运动物体从背景中检测出来,通过色差的不同来将移动的物体于背景区别开,...使用一些OpenCV绘图功能来绘制交叉点,并且显示在跟踪的物体图像上,并且在整个监测运动的工程中,可以控制监测点的开关,运行和退出。
  • 本文实现对特定颜色的物体追踪,我实验用的是绿萝的树叶。 新建脚本ball_tracking.py,加入代码: import argparse from collections import deque import cv2 import numpy as np 导入必要的包,然后定义一些函数 ...
  • 要点:使用光流法在舵机旋转的同时进行追踪,若该点运动,则摄像头跟踪联动。 #include<opencv2> #include<opencv> #include<opencv> #include<math.h> #include #include<string> using namespace std; ...
  • opencv运行物体追踪

    2015-01-14 20:59:44
    opencv在静态背景下的物体追踪,运行环境是vs2010,和opencv2410版本。绝对可以运行!需要配置属性,起配置方法可以见本人博客http://blog.csdn.net/qq5132834/article/details/42253341
  • OPENCV运动追踪研究和PYTHON及JAVA实现

    千次阅读 2017-08-24 00:20:33
    opencv运动追踪可以用来捕捉到运行物体或者活物,在被动摄像头上应用,可以在运行时录相,节省宝贵的存储空间。一个外国老哥借助树霉派的摄像头使用PYTHON做一个简单的运行捕捉摄像头,用于捕捉工作时间偷喝他冰箱里...
  • OpenCV杂谈_08 一. 需要做的前期准备 ...一段提前录制好的用于物体检测、追踪的视频(要求:摄像头是保持静止不动的) 一个用的顺手的IDE(本人推荐Pycharm) 二. 源码如下 main.py 文件 ...
  • openCV光流法追踪运动物体email:chentravelling@163.com一、光流简单介绍光流的概念是Gibson在1950年首先提出来的。它是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化...
  • 对视屏中的运动物体用帧差法实现了识别,怎么进行追踪??可以用camshift追踪吗?
  • Python3 Opencv 帧差法 运动物体追踪

    千次阅读 2021-12-10 19:35:41
    Python3 Opencv 运动物体追踪 绘制所有的边框 微信公众号:【流星蝴蝶没有剑】回台回复:121863562
  • 运动追踪器 使用 OpenCV 3.0.0 对视频中的运动物体进行运动跟踪 基本依赖项是 OpenCV 3.0.0 和 Numpy 大部分代码需要重构,以便更容易地调整参数。 我在蚂蚁数据上运行代码的结果可以在这里看到: :
  • 正所谓的光流估计,就是在视频的前后帧的分析中,...2:小范围运动:随着时间的变化,运动的变化,物体运动不会产生剧烈的变化。这个情况下,灰度对位置的偏导数就可以近似是 3:空间一致性:一个场景上,相临近的一.
  • from collections import deque import numpy as np #import imutils import cv2 import time ...#初始化追踪点的列表 mybuffer = 64 pts = deque(maxlen=mybuffer) #打开摄像头 camera = cv2.Vide.
  • 使用opencv_traincascade 分类器的训练模型包括两个主要阶段:于HAAR或LBP模型的训练阶段和检测阶段。本文档概述了训练自己的弱分类器的级联所需的功能。当前指南将逐步完成所有不同阶段:收集训练数据,准备训练...
  • 利用opencv实现运动目标跟踪,可用于车流量检测等方面
  • opencv人脸识别及追踪 介绍 (Introduction) In my previous work, I used pre-trained Yolov3 model to detect and used SORT (simple online and realtime tracking) to track football players from video. Then I...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,383
精华内容 553
热门标签
关键字:

opencv追踪运动的物体

友情链接: movies_sicnu.rar