0

我目前正计划训练一个二值图像分类模型。我要训练的图像是两张原始图片之间的差异。换句话说,对于每个数据条目,我从 2 张图片开始,取它们的差异,并将差异标记为 0 或 1。我的问题是找到这种差异的最佳方法是什么。我知道cv2.absdiff然后正常减去图像 - 最有效的方法是什么?

关于数据:我正在训练的图像是屏幕截图,通常相同,但可能存在细微差异。我发现正常减法似乎显示的差异小于 absdiff。

这是我用于 absdiff 的代码:

diff = cv2.absdiff(img1, img2)
        mask = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY)
    
        th = 1
        imask =  mask>1
    
        canvas = np.zeros_like(img2, np.uint8)
        canvas[imask] = img2[imask]

然后这是正常的减法:

def extract_diff(self,imageA, imageB, image_name, path):
       subtract = imageB.astype(np.float32) - imageA.astype(np.float32)
        mask = cv2.inRange(np.abs(subtract),(30,30,30),(255,255,255))
        
        th = 1
        imask =  mask>1
    
        canvas = np.zeros_like(imageA, np.uint8)
        canvas[imask] = imageA[imask]

谢谢!

4

1 回答 1

0

差异可以是消极的或积极的。

对于某些不能为负数的数字类型,例如 uint8,负值会环绕,该值将不再有意义。

这就是 absdiff 存在的原因。它总是给你无符号的差异,这些差异不会环绕。

于 2020-12-05T19:08:11.190 回答