将图像像素从正方形转换为六边形

时间:2016-09-10 00:03:47

标签: python opencv numpy image-processing

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

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

enter image description here 没有尝试过。感谢

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

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

convert -size 512x256 pattern:hexagons hexagons.png

enter image description here

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

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

enter image description here

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

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

enter image description here

现在使用该掩码屏蔽原始图像并获取该单元格的平均颜色,并将其写入您尚未发明的文件格式。重复所有细胞/颜色。

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

请注意,如果要处理大量这些内容,则应考虑使用 GNU Parallel 之类的内容来利用多个内核。因此,如果您创建一个名为ProcessOneImage的脚本,并且您要执行2,000个图像,则可以使用:

parallel ProcessOneImage ::: *.png
如果您的PC有8个内核,它将保持8个作业始终在运行。还有更多选项,请尝试man parallel

答案 2 :(得分:0)

首先,我认为没有这样的功能可供您执行晶格转换,因此您可能需要自己实现转换过程。

晶格转换是重新采样过程,它也是一个插值过程。在六边形图像处理文件中已经开发了许多算法。

请看你的例子: enter image description here enter image description here