Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用opencv在python中减去两个视频帧_Python_Opencv_Video - Fatal编程技术网

如何使用opencv在python中减去两个视频帧

如何使用opencv在python中减去两个视频帧,python,opencv,video,Python,Opencv,Video,我正在尝试做一些非常简单的事情:从视频中减去bg图像以进行对象跟踪。我知道图像可以简单地相互减去,如下所示img3=img2-img1。然而,即使我从一个简单的图像开始,在其中添加一条黑线并将其存储为img2,img3也不会仅仅显示这条线。当我运行以下代码时 import cv2 img1 = cv2.imread("img1.png") img2 = cv2.imread("img2.png") img3 = img2 - img1 cv2.imwrite("img3.png",img3)

我正在尝试做一些非常简单的事情:从视频中减去bg图像以进行对象跟踪。我知道图像可以简单地相互减去,如下所示
img3=img2-img1
。然而,即使我从一个简单的图像开始,在其中添加一条黑线并将其存储为img2,img3也不会仅仅显示这条线。当我运行以下代码时

import cv2
img1 = cv2.imread("img1.png")
img2 = cv2.imread("img2.png")
img3 = img2 - img1
cv2.imwrite("img3.png",img3)
带波纹管img1和img2:

我得到了下面左边的图像,而不是右边的图像:

我想在视频中使用此方法进行背景提取,例如,我有一个显示emtpy场景的bg图像文件和一个显示同一场景的视频,其中有时对象在屏幕上进出。我使用了下面的代码,但类似地得到了黑白图像,而不仅仅是没有场景的可见对象

import cv2
import numpy as np
from PIL import Image

capture = cv2.VideoCapture("video.mov")     
while True:
    f, frame = capture.read()
    frame = cv2.GaussianBlur(frame,(15,15),0)
    frame = frame - bg
    cv2.imshow("window", frame)
ps:我知道自动背景减法,但我有非常好的背景文件和非常清晰的空场景,有非常明显的物体,所以我认为这应该很容易工作


更新:我刚刚了解了PIL ImageChops difference函数,该函数可以通过两幅图像获得我想要的效果,但似乎无法用于使用opencv打开的视频。还可以使用numpy阵列手动执行ImageChops.difference(img1、img2)吗?

使用此代码可以获得最接近预期的结果:

img3 = 255 - cv2.absdiff(img1,img2)
此代码将为您提供以下信息:

请注意,仅使用
cv2.absdiff(img1,img2)
将给出此结果的位置,因为基本上此操作会告诉您两个图像之间的差异-如果在某个位置上没有差异,则结果(在此位置)为0。
为了达到“完美的效果”(正是您所期望的),您需要应用一些阈值(或其他类型的过滤器,将擦除图像的左侧部分)