猿问

两个图像的 OpenCV 'BackgroundSubtractorMOG2'

我正在尝试使用 OpenCV 的 BackgroundSubtractorMOG2 方法突出显示两个几乎相似的图像蒙版之间的差异。


我的代码:


def Approach_2():

    img = [0, 0]

    img[0] = cv2.imread('images/4-left.PNG', cv2.IMREAD_GRAYSCALE)

    img[1] = cv2.imread('images/4-right.PNG', cv2.IMREAD_GRAYSCALE)


    img[0], img[1] = make_similar(img[0], img[1]) # make two images similar (equal width and height) by applying scaling, translation and performs Canny edge detection on two images


    fps = 5


    fgbg = cv2.createBackgroundSubtractorMOG2(detectShadows=True)


    cv2.imshow("A", img[0])

    cv2.imshow("B", img[1])


    i = 1

    while(True):


        frame = img[i]

        i = 1-i

        fgmask = fgbg.apply(frame)        


        cv2.imshow('original', frame)

        cv2.imshow('fg', fgmask)

        # cv2.imshow('fg', cv2.bitwise_and(frame, frame, mask=fgmask))


        time.sleep(1 / fps)


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


    cv2.destroyAllWindows()


if __name__ == '__main__':

    Approach_2()

但我只得到空白的“fgmask”。

有什么建议。?


小唯快跑啊
浏览 287回答 2
2回答

DIEA

如评论中所述,您应该按位操作。它更容易,更有效。你可以在这里阅读添加一些额外信息:背景减法器可以(带有一些技巧)用于静止图像,但它适用于视频。您可以在此处找到示例代码至于您的代码,它没有建立纯色背景,因为它在每一帧上交替使用两个源图像。因此结果是一个空白掩码。

达令说

试试这个,看看它是如何工作的:while(True):    f1 = img[0]    f2 = img[1]    fg1 = fgbg.apply(f1)    fb2 = fgbg.apply(f2)    cv2.imshow('original', frame)    cv2.imshow('fg1', fg1)    cv2.imshow('fg2', fb2)    # cv2.imshow('fg', cv2.bitwise_and(frame, frame, mask=fgmask))    time.sleep(1 / fps)    if(cv2.waitKey(1) & 0xFF == ord('q')) : breakcv2.destroyAllWindows()
随时随地看视频慕课网APP

相关分类

Python
我要回答