【问题标题】:What is GIMP threshold algorithm?什么是 GIMP 阈值算法?
【发布时间】:2019-10-04 15:19:04
【问题描述】:

我是 opencv 的初学者,我尝试像 GIMP 应用程序那样对图像进行阈值处理,但我不知道 GIMP 阈值算法。我在 opencv 中尝试“阈值”方法,但结果不同。 谁能帮帮我?

我使用 opencv-3.4.3。

Mat image = imread("myimage.png");
Mat ths;
threshold(image, ths, 180, 255, THRESH_BINARY);
imwrite("ths-image.png", ths);

opencv 'threshold' 和 GIMP 'threshold' 结果不一样。

编辑#1

输入图像是: Input file

转换为 HLS HLS file

带有threshold value = 210的GIMP阈值图像 GIMP result

将 HLS 转换为灰色以获得进程 OpenCV 阈值 HLS2Gray

OpenCV THRESH_BINARYthreshold value = 210 TRESH_BINARY

OpenCV THRESH_TRUNCthreshold value = 210 THRESH_TRUNC

OpenCV THRESH_TOZEROthreshold value = 210 THRESH_TOZERO

【问题讨论】:

  • stackoverflow.com/a/56164082/2836621 获取灰度图像并尝试更改程序中的180,看看是否可以解决。
  • myimage.png是单通道图片还是多通道图片?
  • 输入图像是灰度的。

标签: c++ opencv gimp threshold


【解决方案1】:

OpenCV 有几种方法来解释阈值。您当前已将其设置为 THRESH_BINARY。也许其他方法之一更类似于您在 GIMP 中看到的:

此图显示了阈值为 127 的不同方法的输出。

【讨论】:

    【解决方案2】:

    这里有两种使用 Imagemagick 对图像进行二值化的方法。

    第一个将图像转换为 HCL 颜色空间并提取色度(饱和度)通道(编号为 H=0、C=1、L=2)。接下来将图像拉伸到全动态范围。然后最后做了一个简单的阈值。

    convert img.png -colorspace HCL -channel 1 -separate +channel -auto-level -threshold 57% result1.png
    


    第二个只是将接近黄色的颜色转换为白色,其余的颜色转换为黑色。

    convert img.png -fuzz 10% -fill white -opaque "rgb(229,207,70)" -fill black +opaque white result2.png
    


    我不知道 GIMP 是做什么的。此外,我无法使用 GIMP 和您指定的 210 值重现您的结果。

    这是我从 GIMP 得到的:

    我怀疑 GIMP 在值模式下会转换为 HSV,并且只是对 V 通道设置阈值。这是使用等效的 Imagemagick 命令(使用 210/255=82.35%)

    convert img.png -colorspace HSV -channel 2 -separate +channel -threshold 82.35% IM_threshold_210.png
    


    它们在我看来几乎一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      相关资源
      最近更新 更多