我试着用一幅图像减去另一幅来检查两幅图像是否相同。 我正在使用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)
什么会导致这种行为? 黑色图像有这么多非零像素有意义吗? 如果是,是否有其他方法验证图像是否全黑
谢谢
考虑到像素的灰度值介于0-255之间,对于0差,两个像素必须采用相同的值。由于高斯模糊,像素值会合。例如,让我们将两张图片中的像素p1和p2放在同一坐标系中。在高斯模糊之前,值分别为p1=330,p2=301差异(p1,p2)=29,而高斯模糊后其值是p1=315,p2=313,也就是说,差(p1,p2)=2。由于灰度值为29的图像比2的图像白得多,因此看起来更清晰
高斯模糊的目的是减少目标边缘的数量,以获得平滑的图像。执行此操作时,值许多像素会聚,得到更平滑的过渡。但是,这并不意味着相似的图像在相同的像素坐标下具有相同的值。对图片应用独特的平滑处理,每个像素值根据其相邻像素重新分配给图片。事实上,你得到的结果正好证实了这一点。您无法准确观察,因为像素值彼此接近,但由于高斯分布,相同的像素数将减少
有一种更简单的统计方法来判断两张图片是否相同。 找出平均值和标准偏差值对于具有(平均值,STD)=cv2.MeansTDEV(图像1)的每个RGB通道,并计算值和其他图像的距离。经过几次尝试,您可以观察到相同的图像应该有多接近。 “颜色通道统计”一词可用于谷歌搜索
相关问题 更多 >
编程相关推荐