我的findContours()函数在具有不同dpi的图像上表现异常

时间:2019-02-12 14:59:27

标签: c++ opencv

这是findContours()在两个相似图像上的结果。它们具有相同的分辨率(1920x1080),但DPI​​不同(96和300)。

DPI300 DPI96 如您所见,较高dpi输入的结果使我得到20的轮廓大小,这是正确的,而较低dpi的输入却给了我奇怪的结果。

我给出的论据是:findContours(gray, contours, CV_RETR_LIST, CV_CHAIN_APPROX_NONE)

这与CV_RETR_LIST模式有关吗?

非常感谢:)

1 个答案:

答案 0 :(得分:1)

在很多情况下,例如保存JPEG图像或更改DPI,可能会生成一些人眼几乎看不见的伪像。通常它在两种颜色之间。例如,在您的图像中,球体具有颜色,背景是黑色。在彩色的像素周围,您将有一些几乎黑色的像素。

您始终可以使用阈值功能来抑制这些像素。在将其传递给findContours函数之前,应先完成此操作。

由于像素几乎是黑色的,因此足以将阈值设置得很低,例如10。