在使用 OpenCV 时,我发现了一种奇怪的行为,而我的知识无法解释它。 也许有人会给出答案。
image= cv.imread("image.jpg", 0)
__, thre = cv.threshold(image, 1, 255, cv.THRESH_BINARY)
plt.imshow(thre)
image = cv.imread("image.jpg")
image= cv.cvtColor(output, cv.COLOR_BGR2GRAY)
__, thre = cv.threshold(image, 1, 255, cv.THRESH_BINARY)
plt.imshow(thre)
正如您所看到的,这两个图像有点不同。 有人可以解释一下为什么使用带标志 0(灰度)的 imread 会产生与使用不带标志的 imread 不同的结果,然后将其转换为灰度。
是因为 cvtColor 标志吗?
我不确定这是否是您观察到的效果的原因,但我想指出,RGB到灰度转换存在两种不同的方式:即使用均值和使用加权平均值,在以后的情况下可能会使用不同的权重使用,
cvtColor()
据说使用以下公式
Y = 0.299*R + 0.587*G + 0.114*B
链接文章中还提供了另一个公式,其权重根据人类感知进行了调整,如下
Z = 0.2126*R + 0.7152*G + 0.0722*B
请注意,上述转换是幂等的,您可能会不小心将已经灰度的图像输入其中。