如何获得下图的黑白图像?

时间:2017-03-14 06:48:08

标签: python opencv image-processing computer-vision scikit-image

enter image description here

我想准确地将图片转换为黑白图像,其中种子将由白色表示,背景为黑色。我想在python opencv代码中使用它。请帮帮我

我使用下面给出的代码得到了上面图片的好结果。现在我有另一张图片,其中阈值似乎不起作用。我该如何解决这个问题。我得到的输出如下图所示 enter image description here

另外,种子中有一些凹痕,程序将其作为种子的边界,这不是如下图所示的良好结果。我怎样才能使程序忽略凹痕。在这种情况下掩盖种子是一个很好的选择。 enter image description here

2 个答案:

答案 0 :(得分:4)

我将图像从BGR色彩空间转换为HSV色彩空间。

然后我提取了 hue 频道:

enter image description here

然后我对它执行了阈值:

enter image description here

注意:

每当您在某些区域遇到困难时,尝试在不同的色彩空间中工作,HSV色彩空间最为突出。

<强>更新

以下是代码:

import cv2
import numpy as np

filename = 'seed.jpg'
img = cv2.imread(filename)  #---Reading image file---

hsv_img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)  #---Converting RGB image to HSV
hue, saturation, value, = cv2.split(hsv_img)   #---Splitting HSV image to 3 channels---

blur = cv2.GaussianBlur(hue,(3,3),0)   #---Blur to smooth the edges---

ret,th = cv2.threshold(blur, 38, 255, 0)   #---Binary threshold---
cv2.imshow('th.jpg',th)

现在,您可以执行轮廓操作以突出显示您感兴趣的区域。试试看!! :)

另一个更新:

我发现轮廓高于某个约束来得到这个:

enter image description here

答案 1 :(得分:2)

图像分割有无数种方法。

最简单的是全局阈值操作。如果您想了解更多其他方法,您应该阅读一些书籍。无论如何,我建议您进行任何进一步的图像处理。如果您不了解最基本的工具,开始图像处理没有多大意义。

只是为了向您展示如何实现这一目标:

我将图像从RGB转换为HSB。然后,我将单独的全局阈值应用于色调和亮度通道,以获得两个图像的最佳分割结果。 然后使用逐像素AND操作组合两个二进制图像。我这样做是因为两个通道都给出了次优效果,但它们的重叠非常好。 我还应用了一些形态学运算符来清理结果。 当然,您可以反转图像以获得所需的黑色背景......

阈值和使用的频道当然取决于您拥有的图像以及您想要实现的目标。这是一个特定于案例的过程,可以在有限的范围内动态调整。

enter image description here

随后可以进行拉伸或任何你需要的东西: enter image description here