如何比较 numPy 数组中的两个图像以获取它们不同的像素

问题描述 投票:0回答:1

我在 NumPy 数组中有两张图像,一张是没有字符的游戏,另一张是有字符的游戏,然后比较这两个图像以获得一个新的 NumPy 数组,其中仅包含与参考值不同的像素,实质上删除了带有字符的图像的背景。

下面的代码是我关于如何做到这一点的想法,但它不起作用,我假设它可以优化为不使用 for 循环。它不起作用的原因是它抛出一个错误说 ValueError:无法将输入数组从形状 (576,3) 广播到形状 (3,) 出现在这行代码中:result[i] = y

import cv2 as cv
import numpy as np
class filterImages:
    def subtractImage(self, bg, image):
        bg = cv.imread(bg)
        image = cv.imread(image)
        result = np.array([])
        i = 0
        for x, y in zip(bg, image):
            result.resize(i+1,3)
            if (x == y).all():
                z = x-y
                result[i] = z
            else:
                result[i] = y
            i = i + 1    
python numpy numpy-ndarray
1个回答
0
投票

IIUC 你可以做:

import cv2 as cv
import numpy as np

img_1 = cv.imread("python_1.png")
img_2 = cv.imread("python_2.png")

out = np.zeros_like(img_2)

mask = img_1 != img_2
out[mask] = img_2[mask]

cv.imwrite("python_out.png", out)

输入:

python_1.png

python_2.png

python_out.png

© www.soinside.com 2019 - 2024. All rights reserved.