什么是GIMP阈值算法?

时间:2019-05-17 09:51:32

标签: c++ opencv gimp threshold

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

我使用opencv-3.4.3。

>>> np.char.replace(np.array(nums, dtype=np.str), '', 'name ', 1)
array(['name 1', 'name 2', 'name 3', 'name 4', 'name 5'], dtype='<U6')

opencv“阈值”和GIMP“阈值”的结果不相同。

编辑#1

输入图像为: Input file

转换为HLS HLS file

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

GIMP阈值图像 GIMP result

将HLS转换为灰色以获取OpenCV阈值 HLS2Gray

带有threshold value = 210的OpenCV THRESH_BINARY TRESH_BINARY

带有threshold value = 210的OpenCV THRESH_TRUNC THRESH_TRUNC

带有threshold value = 210的OpenCV THRESH_TOZERO THRESH_TOZERO

2 个答案:

答案 0 :(得分:0)

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

enter image description here

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

答案 1 :(得分:0)

以下是使用Imagemagick对图像进行二值化的两种方法。

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

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


enter image description here

第二个简单地将近黄色转换为白色,其余全部转换为黑色。

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


enter image description here

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

这是我从GIMP得到的:

enter image description here

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

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


enter image description here

在我看来,它们几乎一样。