在使用高斯模糊和减法模糊图像后,我有更多的非零像素

2024-09-28 23:43:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用一幅图像减去另一幅来检查两幅图像是否相同。 我正在使用cv2.countNonZero检查非零像素的数量。 问题是,在对图像进行任何更改之前,我得到了大约3000个非零像素,在新图像(通过减法创建)中,我可以看到所有这些像素,但在使用高斯模糊(cv2.GaussianBlur(image1,(3,3),0))之后,我得到了大约6000个非零像素,但新图像都是黑色的

如果我的描述不清楚,下面是代码:

image1 = cv2.imread(path1)
image2 = cv2.imread(path2)


#Gaussian Filtering
gaus_image1  = cv2.GaussianBlur(image1,(3,3),0)
gaus_image2  = cv2.GaussianBlur(image2,(3,3),0)

gaus_diff = cv2.subtract(gaus_image1, gaus_image2)

print(str(cv2.countNonZero(cv2.cvtColor(gaus_diff, cv2.COLOR_BGR2GRAY))))
cv2.imshow('gaus_diff.png', gaus_diff)

什么会导致这种行为? 黑色图像有这么多非零像素有意义吗? 如果是,是否有其他方法验证图像是否全黑

谢谢


Tags: 代码图像数量diff像素cv2黑色imread
1条回答
网友
1楼 · 发布于 2024-09-28 23:43:31
  1. 为什么你看不到它的答案是:

考虑到像素的灰度值介于0-255之间,对于0差,两个像素必须采用相同的值。由于高斯模糊,像素值​​会合。例如,让我们将两张图片中的像素p1和p2放在同一坐标系中。在高斯模糊之前,值​​分别为p1=330,p2=301差异(p1,p2)=29,而高斯模糊后其值​​是p1=315,p2=313,也就是说,差(p1,p2)=2。由于灰度值为29的图像比2的图像白得多,因此看起来更清晰

  1. 有更多非零值的答案是:

高斯模糊的目的是减少目标边缘的数量,以获得平滑的图像。执行此操作时,值​​许多像素会聚,得到更平滑的过渡。但是,这并不意味着相似的图像在相同的像素坐标下具有相同的值。对图片应用独特的平滑处理,每个像素值根据其相邻像素重新分配给图片。事实上,你得到的结果正好证实了这一点。您无法准确观察,因为像素值​​彼此接近,但由于高斯分布,相同的像素数将减少

  1. 忠告:

有一种更简单的统计方法来判断两张图片是否相同。 找出平均值和标准偏差值​​对于具有(平均值,STD)=cv2.MeansTDEV(图像1)的每个RGB通道,并计算值​​和其他图像的距离。经过几次尝试,您可以观察到相同的图像应该有多接近。 “颜色通道统计”一词可用于谷歌搜索

相关问题 更多 >