首页 > 解决方案 > 我的 findContours() 函数在具有不同 dpi 的图像上表现异常

问题描述

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

DPI300 DPI96 如您所见,较高 dpi 输入的结果给我一个 20 的轮廓大小,这是正确的,而低 dpi 的结果只是给我奇怪的结果。

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

这与CV_RETR_LIST模式有关吗?

提前谢谢了:)

标签: c++opencv

解决方案


在很多压缩情况下,例如保存 JPEG 图像或更改 DPI,会产生一些人眼几乎看不到的伪影。通常介于两种颜色之间。例如,在您的图像中,球体有颜色,背景是黑色。在彩色的周围,你会有一些几乎是黑色的像素。

您始终可以使用阈值函数抑制这些像素。这大部分是在传递给 findContours 函数之前完成的。

由于像素几乎是黑色的,因此将阈值设置得非常低就足够了,比如 10。


推荐阅读