【问题标题】:how can i get a black and white image for the following picture?如何获得以下图片的黑白图像?
【发布时间】:2017-08-04 09:35:48
【问题描述】:

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

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

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

【问题讨论】:

  • 我尝试了所有类型的阈值,但由于背景和前景的差异很小,结果并不好。
  • 阈值不起作用?
  • 有多种方法可以根据您的输入创建黑白(二进制)图像。这个过程称为分段。它们从简单的全局阈值到复杂的机器学习。在继续做这些事情之前,请帮自己一个忙,阅读一本关于图像处理的基础书籍……
  • 计算边缘 -> 执行形态膨胀 -> 掩蔽(或)轮廓属性
  • 也尝试在细化轮廓之前反转二进制图像

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


【解决方案1】:

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

然后我提取了hue通道:

然后我对其进行了阈值处理:

注意:

当您在某些领域遇到困难时,请尝试使用不同的色彩空间,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)

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

另一个更新:

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

【讨论】:

  • 这太完美了。你介意分享代码吗?
  • @annie 我已经添加了代码。如果遇到路障,请伸出援手:D
  • 非常感谢@Jeru Luke。我遇到了另一个问题。我编辑了我的帖子。你能帮我解决这个问题吗?
【解决方案2】:

图像分割有无数种方法。

最简单的一种是全局阈值操作。如果您想了解更多关于其他方法的信息,您应该阅读一些书籍。在您进行任何进一步的图像处理之前,我还是建议您这样做。如果您不了解最基本的工具,那么开始图像处理没有多大意义。

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

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

阈值和使用的通道当然取决于您拥有的图像和您想要达到的目标。这是一个非常具体的过程,可以动态适应有限的扩展。

这之后可以是标签或您需要的任何内容:

【讨论】:

  • 干得好!!您是如何缩小感兴趣的对象的范围的?
  • @JeruLuke 我只是手动裁剪了图像。但是您可以轻松地从形态上删除标尺线,或者通过最小面积约束在随后的标记步骤中删除。但通常你知道你的东西在哪里,所以固定的兴趣区域几乎总是一种选择。
  • 在这种情况下,最小约束区域听起来最好。无论如何都做得很好:D
  • @Piglet wow ..这看起来棒极了...你能分享一下代码吗?请您也可以告诉我任何书名吗?
  • @Piglet 这正是我所需要的。可以分享一下代码吗?
猜你喜欢
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多