【问题标题】:convert image pixels from square to hexagonal将图像像素从正方形转换为六边形
【发布时间】:2016-09-11 00:55:21
【问题描述】:

如何将图像的像素从正方形转换为六边形?这样做我需要从每个十六进制像素中提取 rgb 值。是否有任何库或函数可以简化此过程?

示例:蒙娜丽莎六边形像素形状

什么都没试过。谢谢

【问题讨论】:

  • 也许它有助于解释您所说的“将像素......从正方形转换为六边形”的意思。尤其要明确您心目中的六边形像素排列方式。
  • @P.Pearson 我想获取用六边形像素而不是方形像素表示的图像的 rgb 值。具有十六进制像素的图像的 rgb 值与方形像素(1 px 示例)略有不同,这就是我需要的。
  • 如果我们比较 img 中的相同像素,例如位置为 (1,1) 的平方像素与相同位置的六边形 px,则 rgb 值应该不同吧?
  • 具有挑战性。在六边形网格中重复的“单元格”具有 sqrt(3) 的纵横比,这将使其与 any 方形网格不相称。为了让想法滚动起来,可以用一个六边形网格覆盖原来的正方形网格,六边形的面积与正方形的面积相同,然后按照与下面正方形的重叠比例为每个六边形着色。繁琐的几何,而且代码会很慢,但也许你并不着急。
  • 恭喜,您选择了计算机可以存储的唯一格式类型。这个答案没有用。想象一下,我问你用什么语言写问题,你说“用键盘”。你能举一个简单的(~10 像素)黑白十六进制图像的例子,它的数组/二进制表示应该是什么?

标签: python opencv numpy image-processing


【解决方案1】:

这是一种可能的方法,但我确信如果您能够编写代码来读取、操作和使用尚未发明的文件格式中的像素,您应该能够自己创建该文件 ;-)

您可以使用 ImageMagick 生成六边形网格,该工具安装在大多数 Linux 发行版上,可用于 OSX 和 Windows。在这里,我只是在终端的命令行中做事,但也有 Python、Perl、PHP、.Net、C/C++ 和其他绑定 - 所以请选择。

首先制作一个六边形网格 - 你必须计算出你需要的尺寸,我的尺寸是任意的:

convert -size 512x256 pattern:hexagons hexagons.png

现在,填充六边形,每一个都用不同的颜色,我只是在这里做一些填充的例子来给你一个想法。理想情况下,您将使用颜色#000 为第一个(左上角)六边形着色,并使用#001 为下一个六边形着色,以便您可以将输出图像的坐标作为连续颜色进行迭代。此外,根据您的输出图像大小,您可能需要使用 32 位 PNG 来容纳 hexels(六边形像素)的数量。

convert hexagons.png                          \
   -fill red - draw "color 100,100 floodfill" \
   -fill blue -draw "color 200,200 floodfill" \
   colouredmask.png

现在遍历所有颜色,使每种颜色除了该颜色透明。请注意,我添加了一个黑色边框,以便您可以在 StackOverflow 的白色背景上看到上下文:

convert colouredmask.png -fill none +opaque red onecell.png

现在用该蒙版蒙版原始图像,获取该单元格的平均颜色,并将其写入您尚未发明的文件格式。对所有单元格/颜色重复此操作。

请注意,基本的六边形图案是 30x18,因此您应该将网格大小设置为该网格的倍数,以使其正确镶嵌。

请注意,如果您要处理大量此类问题,则应考虑使用 GNU Parallel 之类的东西来利用多核。因此,如果您制作了一个名为 ProcessOneImage 的脚本并且您有 2,000 张图片要做,您可以使用:

parallel ProcessOneImage ::: *.png

如果您的 PC 有 8 个内核,它将保持 8 个作业一直在运行。还有更多选择,请尝试man parallel

【讨论】:

    【解决方案2】:

    Fred 在他的网站上有一个 Imagemagick 脚本,可以做你想做的事:STAINEDGLASS

    【讨论】:

    • 酷脚本 - 我认为 OP 实际上想要六边形像素,而不是显示被处理成六边形的图像的正方形像素的 JPEG/PNG 文件。不过,您可能是对的-问题尚不清楚:-)
    【解决方案3】:

    首先,我认为没有这样一个函数可以让你执行点阵转换,因此你可能需要自己实现转换过程。

    点阵转换是一个重采样过程,也是一个插值过程。在六边形图像处理论文中已经开发了很多算法。

    请查看示例:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-16
      • 1970-01-01
      • 2014-05-09
      • 2017-10-08
      • 2012-03-17
      相关资源
      最近更新 更多