这是findContours()
在两个相似图像上的结果。它们具有相同的分辨率(1920x1080),但DPI不同(96和300)。
如您所见,较高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/