Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >cv2.GaussianBlur多种内核大小

cv2.GaussianBlur多种内核大小
EN

Stack Overflow用户
提问于 2021-01-15 04:23:45
回答 1查看 78关注 0票数 0

目前,我正在尝试使用OpenCV执行运动检测。对于每个新的帧,我使用下面的函数来与以前的帧进行比较:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    def detect(new_frame, kernel_size):
        frame=cv2.cvtColor(new_frame,cv2.COLOR_BGR2GRAY) #Grayscale conversion of the frame
        frame=cv2.GaussianBlur(frame, (kernel_size, kernel_size),0) 
        
        deltaFrame=cv2.absdiff(old_frame, frame)    
        old_frame = frame

        threshFrame=cv2.threshold(deltaFrame, 5, 255, cv2.THRESH_BINARY)[1]
        threshFrame=cv2.dilate(threshFrame, None, iterations=2)
            
        (cnts,_)=cv2.findContours(threshFrame.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        return cnts

我的问题是,我必须检测两种类型的对象的运动,每种类型的函数都有自己的核大小参数的有效值(即:5和11)。所以我必须对每个新帧使用该函数2次。但是我的设备有资源限制,所以我想尽可能减少这个过程。我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2021-01-15 16:17:18

在掩码上尝试按位函数。检测每个像素是否在移动。它很快。

对我来说,诀窍是处理小尺寸的frame图像。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
import cv2 as cv2

fid=0

video_path="videos/example.mp4"
cap = cv2.VideoCapture(video_path)

# Some characteristics from the original video
w_frame, h_frame = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps, num_frames = cap.get(cv2.CAP_PROP_FPS), cap.get(cv2.CAP_PROP_FRAME_COUNT)
print(fps,w_frame,h_frame)
x,y,h,w = 0,0,h_frame,w_frame

fnum=0
while(True):
    
    ret, frame = cap.read()

    if ret == None: pass 

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


    if  fnum==0:
        last_edges = edges.copy() 
        
    ret, mask1 = cv2.threshold(edges, 127, 255, cv2.THRESH_BINARY)
    ret, mask2 = cv2.threshold(last_edges, 127 , 255, cv2.THRESH_BINARY)

    dst1 = cv2.bitwise_and(mask2,mask1)
    dst2 = cv2.bitwise_not(dst1)
    dst4 = cv2.bitwise_and(dst2,dst2,mask=mask1)

    scale_percent = 10 # percent of original size
    width = int(dst4.shape[1] * scale_percent / 100)
    height = int(dst4.shape[0] * scale_percent / 100)
    dim = (width, height)
    
    # resize image
    mini = cv2.resize(dst4, dim, interpolation = cv2.INTER_AREA)

    h,w = mini.shape

    th=30 #my threshold

    points=[]

    for y in range(0, len(mini),4):
        for x in range(0,len(mini[y]),4):
            c1 = mini[y][x] > th and mini[y][x+1] > th and mini[y][x+2] > th and mini[y][x+3] > th  
            c2 = mini[y][x] > th and mini[y+1][x] > th and mini[y+2][x] > th and mini[y+3][x] > th
            if c1 or c2:
                
                start_point=(x*scale_percent,y*scale_percent)

                points.append(start_point)

                color1=(0,0,255)
                color2=(0,255,255)
                thickness=2
                cv2.circle(frame, start_point, 20, color1, thickness) 
    
    if len(points) >= 2:
        cx1 , cy1 = points[0][0] , points[0][1]
        cx2 , cy2 = points[-1][0] , points[-1][1]

        cxmin = min(cx1,cx2)
        cymin = min(cy1,cy2)

        cxmax = max(cx1,cx2)
        cymax = max(cy1,cy2)

        print(cymin,cymax , '--' , cxmin,cxmax)

        cv2.rectangle(frame, (cxmin,cymin) , (cxmax,cymax), color2, thickness)


    
    # Display the resulting frame 
    cv2.imshow('frame4', frame)
    cv2.imshow('framemin', mini)

    last_edges = edges.copy() 
    fnum+=1

    if cv2.waitKey(33) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

您可以应用您自己的遮罩来检测一个或另一个玩模糊值的对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65730493

复制
相关文章
log4js日志
该文章介绍了如何利用log4j2的配置文件对日志进行切割和归档,并给出了具体的例子。
用户1141560
2017/12/26
2.3K0
log4js的配置
log4js是一个日志记录模块,可以单独使用,也可以,结合服务框架使用,这里结合express配置来使用。
挥刀北上
2023/05/25
9020
log4js的配置
Log4js 2.9.0 日志管理插件
Node端的日志插件Log4js,以后版本更新了继续跟进 安装&&版本 npm install log4js 或者 yarn add log4js "express": "4.16.2", "log4js": "2.9.0", 最简单的写法 var log4js = require('log4js'); var logger = log4js.getLogger(); logger.level = 'debug'; logger.debug("Some debug messages"); 稍
CloudCat
2022/06/15
4320
基于 log4js 做全链路日志
提到监控或应用观测,经常出现三个词:「链路(Tracing)」、「指标(Metric)」和「日志(Logging)」。
joefu
2022/01/20
2.5K1
MySQL kill会话不起作用?
在一次日常测试中发现,kill 一个会话后,SQL语句依然在运行并没终止;被kill的会话重新连接并继续执行原来的SQL语句。
老叶茶馆
2023/09/01
2520
MySQL kill会话不起作用?
nodejs总结之日志模块log4js
1 /** 2 * npm install log4js 3 * 源码及文档地址:https://github.com/nomiddlename/log4js-node 4 */ 5 var log4js = require('log4js'); 6 7 /** 8 * 第一种: 9 * configure方法为配置log4js对象,内部有levels、appenders、categories三个属性 10 * levels: 11 *
晓晨
2018/06/22
2.9K0
nodejs使用log4js做日志系统
在一个项目当中,日志系统在项目中重要性在这里就不再累述,log4js是nodejs中的一个日志模块,通过设置其优先级别,可以打印出不同级别的日志,便于后续的系统分析。下面来介绍一下log4js的具体使用,这里介绍的版本为2.8.0。
OECOM
2020/07/01
5K0
MySQL kill会话不起作用?
在一次日常测试中发现,kill 一个会话后,SQL语句依然在运行并没终止;被kill的会话重新连接并继续执行原来的SQL语句。
GreatSQL社区
2023/08/10
3980
MySQL kill会话不起作用?
RecyclerView.Adapter notifyDataSetChanged 不起作用
如果应用启动,不在聊天界面,接收到消息后就弹出通知栏消息通知用户,点击进入聊天界面。
张拭心 shixinzhang
2022/05/06
3K0
关于.gitignore不起作用「建议收藏」
由于公司和家里的as版本不同,倒腾了好久,但是代码到本地后build.gradle等文件做了修改,为了不影响公司版本,故家里的需要忽略这些文件的修改,想到的就是加gitignore配置,直接添加不起效果,找到如下办法:
全栈程序员站长
2022/11/01
2K0
setOnItemClickListener不起作用解决方法
setOnItemClickListener不起作用解决方法 问题 原因 源码解析 解决方法 问题 使用ListView时通常会和Adapter一起使用,在使用setOnItemClickListener方法监听节点时不起作用 原因 原因是因为在你自己定义的Item中存在诸如ImageButton,Button,CheckBox等子控件,此时这些子控件会获取到焦点,所以常常当点击item时变化的是子控件,item本身的点击没有响应,此时就该用到descendantFocusability属性了,下面让我
是阿超
2022/05/05
2K0
setOnItemClickListener不起作用解决方法
Nginx配置缺失导致CSS不起作用
启动nginx,打开网页,发现样式并没有如期加载,看chrome的console,显示如下:
血狼debugeeker
2021/03/02
3.9K0
解决CSS属性position:fixed不起作用
若父元素设置了transform属性,无论transform设置任何属性值,都会导致position:fixed属性失效!
赵彤刚
2022/12/13
3.3K0
解决CSS属性position:fixed不起作用
textarea 的 placeholder="" 不起作用
textarea 的 placeholder="请输入解决方案(极简化、不超过500字)" 不起作用
一个会写诗的程序员
2018/08/17
2K0
FeignClient 设置 fallback不起作用
StringCloud FeignClient 设置 fallback不起作用 今天在配置feign中是用hystrix的时候,FeignClient 中的 fallback不起任何作用,本来以为是 不支持这个属性了,打开源码一看,还提供这个fallback属性,后来翻阅各中资料,才发现是没有打开feign对hustrix的支持。下面是解决方案: 在application.yml中加入如下配置就可以了 feign: hystrix: enabled: true
码农笔录
2018/06/29
3.5K0
网站就必须用响应式布局吗?MVC视图展现模式之移动布局
本文先引入给读者一个自己研究的机会,下次深入说明一下: 废话不多说,直接上图 新建一个mvc的项目 在视图里面添加一个移动端视图 正常访问一下 Bootstrap自带的响应式的方式(页面代码并没有改变
逸鹏
2018/04/10
1.1K0
网站就必须用响应式布局吗?MVC视图展现模式之移动布局
【约束布局】使用 Design 模式编辑 ConstraintLayout 约束布局 ( 添加 Guideline 引导线 | 添加 FragmentContainerView )
向约束布局 ConstraintLayout 中添加两个 Fragment , 垂直方向各占 50 % , 一个在屏幕上半部分 , 一个占据屏幕下半部分 ;
韩曙亮
2023/03/30
1.1K0
【约束布局】使用 Design 模式编辑 ConstraintLayout 约束布局 ( 添加 Guideline 引导线 | 添加 FragmentContainerView )
【3/25】使用组合模式(Composite Pattern)实现布局容器
组合模式(Composite)是将对象组合成树形结构,以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。接下来我们考虑在当前项目中应用组合模式。
LIYI
2021/02/23
6900
【3/25】使用组合模式(Composite Pattern)实现布局容器
MVC视图展现模式之移动布局解析-续集
网站就必须用响应式布局吗?MVC视图展现模式之移动布局:http://www.cnblogs.com/dunitian/p/5213787.html 有人会疑问,为什么他能识别.mobile的后缀却不
逸鹏
2018/04/10
7970
MVC视图展现模式之移动布局解析-续集
点击加载更多

相似问题

node log4js maxlogsize不起作用

149

log4js npm错误,log4js配置

10

转义花括号在LOG4Js -替换{模式}{regex}{替换}

12

布局-土地概念在景观模式下不起作用

12

Log4js配置错误

119
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文