Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ My findContours()函数在具有不同dpi的图像上表现异常_C++_Opencv - Fatal编程技术网

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

C++ My findContours()函数在具有不同dpi的图像上表现异常,c++,opencv,C++,Opencv,下面是两张类似图像上的findContours()结果。它们的分辨率相同(1920x1080),但DPI不同(96和300) 正如你所看到的,高dpi输入的结果给了我一个20的轮廓大小,这是正确的,而低dpi的结果只是给了我奇怪的结果 我给出的论点是:findContours(灰色、等高线、CV\u RETR\u列表、CV\u CHAIN\u近似值\u NONE) 这与CV\u RETR\u列表模式有关吗 提前感谢:)在许多压缩情况下,例如保存JPEG图像或更改DPI,可能会生成一些人眼几乎看

下面是两张类似图像上的
findContours()
结果。它们的分辨率相同(1920x1080),但DPI不同(96和300)

正如你所看到的,高dpi输入的结果给了我一个20的轮廓大小,这是正确的,而低dpi的结果只是给了我奇怪的结果

我给出的论点是:
findContours(灰色、等高线、CV\u RETR\u列表、CV\u CHAIN\u近似值\u NONE)

这与
CV\u RETR\u列表
模式有关吗


提前感谢:)

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

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


因为像素几乎是黑色的,所以将阈值设置得很低就足够了,比如10。

看起来第二张图像在球体旁边有一些噪声。也许这些像素不是纯黑色的。您可以尝试对传递给findContours的灰色图像设置阈值。。。不是很难,大概10个左右enough@api55是的,成功了。我想那噪音来自压缩。谢天谢地,类似的问题也会发生,当你把它保存为jpeg。。。压缩会产生一些伪影。我会把它写下来作为答案,然后回答你的问题。因为OpenCV可以处理单个像素,所以DPI元数据是不相关的——不管DPI是什么,都会得到相同的1920x1080像素。第二幅图像上的噪声(正如@api55所指出的)很可能来自历史上某个时候使用的有损编解码器。(TBH,在这样的合成图像上使用JPEG首先有点傻)@DanMašek谢谢你的评论。我对图像压缩非常陌生,但是如果我有纯黑白二值化图像(因为图像仍然是8位的,黑色应该是0,白色255,我想我在这方面是对的),是否有一种图像的首选格式可以防止给我不清楚的边缘?