【问题标题】:Convert image of point data to a 2D boolean array将点数据的图像转换为二维布尔数组
【发布时间】:2014-02-11 21:55:21
【问题描述】:

我想将下面的图像转换为二维布尔数组。

我之前对图像处理库没有太多经验,但是一些浅浅的谷歌搜索给了我一些似乎不适用的库(例如将图像转换为所需的格式,如 jpeg、png 等,或者,一些常见的图像编辑任务,如灰度、调整大小等)。我需要某种对象识别库来计算每个点的 X 和 Y 索引。

除了正方形的坐标,我还希望能够得到行数和列数。

【问题讨论】:

  • 您的图像是如何呈现的?是文件吗? RGB值?一些编码字符串?分隔线的宽度是否恒定(可能为 1 像素)?黑色方块是否总是圆形的?具有恒定的半径?块是否具有恒定的宽度或高度?是否有平滑处理或边缘是否可以视为纯黑/白?
  • 我真的不确定问题出在哪里。任何简单的图形库都允许您加载图像并检查每个像素的值(LibGD 将是我的首选)。如果网格大小始终为 14 像素,则只需测量图像的宽度和高度(减去任何白色边框),减去 1 并除以 14 即可获得水平和垂直单元格的数量。
  • @squeamishossifrage 您是否使用了该库并得出网格大小为 14px 的结论?有没有 libgd 的 python 端口?
  • @deostroll 不,我在图形编辑器中打开了文件并数了数。是否有 libgd 的 python 端口? Try asking Google.

标签: algorithm image-processing


【解决方案1】:

我认为解决此问题的一种方法是使用erosion。您可以使用 openCV 库进行此操作。创建一个边长至少为 14px 的方形内核,然后腐蚀图像。在侵蚀时,你会得到这样的图像:。

您将获得所有正方形中心的像素位置。但是,它也将包含行。这些存在于两个或多个正方形彼此相邻的地方。您必须使用一种算法消除它们,其中没有两个像素可以驻留在 14 像素的圆形半径内。

【讨论】:

  • 您是如何以编程方式找到左上角坐标的?其背后的逻辑是什么?
  • 您不必这样做。加载图片时左上角坐标为(1,1)
  • 为了让侵蚀工作在网格的左上角,而不是图像文件,应该是原点,对吧?也许在我的情况下,顺便说一下 (1, 1)
  • 假设网格左上角和图像顶部和左侧有一些空间。那么你将如何确定网格左上角的坐标?
  • 因此,当您加载图像时,左起第一个非零像素的坐标和顶部起第一个非零像素的坐标将提供网格的左上角。
猜你喜欢
  • 2016-12-08
  • 2021-02-04
  • 2013-07-04
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多