python - 从图像创建弦乐艺术

标签 python opencv computational-geometry

我对 python 比较陌生。我想做一些弦乐艺术肖像。我在看这段视频,这让我很感兴趣:

https://youtu.be/RSRNZaq30W0?t=56

enter image description here

我知道要实现这一点,我首先需要加载图像,然后进行一些边缘检测,然后使用某种形式的 Delaunay 三角测量,但不知道从哪里开始。

我查阅了一些 OpenCV 的示例代码,并弄清楚了如何进行基本的边缘检测。然后我如何将它们转换为积分?然后我需要什么样的算法来“填充”不同的梯度?

我什至不知道这是否是实现此目标的正确方法。有人可以给我指出正确的方向,也许给我一些示例代码以开始使用吗?非常感谢。

最佳答案

边缘检测或三角测量在此应用中不太重要。核心部分是理解视频1:27处的伪代码。最终产品使用一根绳子以特定方式缠绕在不同的指甲上,因此:原始图像中较暗的区域绳子密度较小,而较亮的区域有更多的绳子交叉。

初步准备是:

  • 生成图像的边缘检测版本 (A)
  • 生成图像的模糊版本 (B)

然后第一步是为指甲创建随机位置。显然,为了获得良好的结果,如果随机生成的钉子足够靠近黑白图像的“边缘”,您应该将其“捕捉”到边缘,这样稍后缠绕在这些边缘钉子上的绳子就会产生准确的边界就像在原始图片中一样。在这里,您使用图像 A) 来调整您的指甲。例如,只执行一些潜在的最小化:

  1. 为指甲添加小的随机位置变化。如果钉子现在得到 足够接近图像 A 中的白点(边缘)),直接更改为 那个位置。

  2. 计算潜力。确保你的潜在功能 惩罚太接近的两个点。重复 1) 100 次至 选择潜力最低的一个。

  3. 迭代 1) 和 2) 20 次

接下来您要决定您希望绳子如何缠绕在指甲上。

  • 从一个点A开始,查看一些相邻的点(在一定半径内)B1、B2、B3等。想象一下,如果你从A到Bi附加一个一定宽度的字符串,它在视觉上改变了你的字符串图像P轻微的方式。在P上渲染线段A-B1得到P1,在P上渲染A-B2得到P2等。
  • 找到最好的 Bi,使新图像 Pi 看起来更接近原始图像。您可以只在字符串图像和原始图片之间进行逐像素比较,并使用此度量对每个 Bi 进行评分。视频作者使用模糊图像 B) 去除可能随机影响其评分算法的纹理。
  • 现在最优的 Bi 成为新的 A。找到它的邻居并循环。如果添加任何新字符串只会对分数产生负面影响,则算法可能会停止。

在某些情况下,照片中的明亮区域相距很远,因此穿过黑暗间隙的任何白色字符串只会降低分数。使用您的判断来调整算法以解决那些非凸场景。

关于python - 从图像创建弦乐艺术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55995184/

相关文章:

python - Sphinx 文档处理器扩展对 HTML 和 LaTeX 输出的工作方式不同?

python - 使用 OpenCV 检测彩色圆圈及其中心

opencv - 使用 OpenCV 从小图像中提取点描述符

c++ - 在 C++ 中使用 OpenCV 应用内核

algorithm - 动态简单多边形三角剖分

python - 如何从astropy erfa中取出WGS84轴

python - 模板不存在于/admin/MY_APP/my_model/reversion/change_list.html

python - classmethod除了把self改成cls还有什么作用?

python - 使用 Python 进行 base64 解码,附件通过基于 REST 的 Gmail API 下载

algorithm - 点在多边形内吗?