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

c++ - 我的findContours()函数在具有不同dpi的图像上表现异常-LMLPHP
c++ - 我的findContours()函数在具有不同dpi的图像上表现异常-LMLPHP
如您所见,较高dpi输入的结果使我得到20的轮廓大小,这是正确的,而较低dpi的输入却给了我奇怪的结果。

我给的参数是:findContours(gray, contours, CV_RETR_LIST, CV_CHAIN_APPROX_NONE)
这与CV_RETR_LIST模式有关吗?

提前谢谢了:)

最佳答案

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

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

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

关于c++ - 我的findContours()函数在具有不同dpi的图像上表现异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54652940/

10-13 09:00