写了一个脚本怎么同时运行两个窗口

脚本同时运行两个窗口,怎么实现同时点击两个窗口,而光标在各自的窗口上,窗口间不互相影响?

  • 这篇博客: 基于光流法和混合高斯模型对监控视频中的人群进行跟踪中的 实验代码: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 环境:Win10 | Python 3.7.3 | OpenCV 4.1.0

    步骤一:前景提取

    利用高斯混合模型分离图像帧的前景和背景

    # 创建混合高斯模型
    fgbg = cv2.createBackgroundSubtractorMOG2()
    
    for frame in frames:
    	frame_img = cv2.imread(frame_path + frame, 1)
    	# 利用混合高斯模型提取前景
    	fgmask = fgbg.apply(frame_img)

    提取前景后的视频演示:

    步骤二:跟踪运动

    利用Lucas Kanade光流法跟踪监控视频中的运动,这里利用上面提取的前景计算光流。

    # Shi-Tomasi 角点检测参数
    feature_params = dict( maxCorners = 100,
                           qualityLevel = 0.3,
                           minDistance = 7,
                           blockSize = 7)
    
    # lucas kanade光流法参数
    lk_params = dict( winSize  = (15, 15),
                      maxLevel = 2,
                      criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03))
    first_rgbframe = cv2.imread(frameFG_path + frames[1], 1)
    
    # 计算第一帧的灰度图
    first_frame = cv2.cvtColor(first_rgbframe, cv2.COLOR_BGR2GRAY)
    
    #获取图像中的角点,返回到p0中
    p0 = cv2.goodFeaturesToTrack(first_frame, mask = None, **feature_params)
    
    # 创建一个蒙版用来画轨迹
    mask = np.zeros_like(first_rgbframe)
    
    old_frame = first_frame
    new_frame = np.zeros_like(old_frame)
    
    for frame_i in frames:
    	rgbframe = cv2.imread(frameFG_path + frame_i, 1)
    	rgbframe_bg = cv2.imread(frame_path + frame_i, 1)
    	frame = cv2.cvtColor(rgbframe, cv2.COLOR_BGR2GRAY)
    	new_frame = frame
    
    	# 计算光流
    	p1, st, err = cv2.calcOpticalFlowPyrLK(old_frame, new_frame, p0, None, **lk_params)
    	if (p1 is None):
    		continue
    	# 选取好的跟踪点
    	good_new = p1[st == 1]
    	good_old = p0[st == 1]
    
    	# 画出轨迹
    	for i, (new, old) in enumerate(zip(good_new, good_old)):
    		a,b = new.ravel()
    		c,d = old.ravel()
    		mask = cv2.line(mask, (a, b), (c, d), color[i].tolist(), 1)
    		rgbframe = cv2.circle(rgbframe_bg, (a, b), 2, color[i].tolist(), -1)
    	img = cv2.add(rgbframe, mask)
    
    	cv2.imshow('frame', img)
    	k = cv2.waitKey(30) & 0xff
    	if k == 27:
    		break
    
    	# 更新上一帧的图像和追踪点
    	old_gray = frame.copy()
    	p0 = good_new.reshape(-1,1,2)
    
    	old_frame = new_frame

    在光流跟踪时调用OpenCV的line和circle画图功能添加运动轨迹,并以蒙版的形式添加到原来的帧图像上,处理后的视频演示:

windows只能有一个窗体获得焦点,不允许两个窗体同时获得焦点