细化线条并调整输出 mondrianish 图像错误

Posted

技术标签:

【中文标题】细化线条并调整输出 mondrianish 图像错误【英文标题】:refine lines and rects output mondrianish image error 【发布时间】:2021-11-03 06:09:05 【问题描述】:

我使用 mondrianish 来绘制蒙德里安风格的图像,我想对线条和矩形进行精细控制。但是,当我将线条和矩形应用到 generate_image 函数时,我遇到了错误。

我使用 mondrianish 0.5.3 模块。 https://pypi.org/project/mondrianish/

我输入:

from mondrianish import generate_image, generate_grid 

colors = ("#FFF8F0", "#FCAA67", "#7DB7C0", "#932b25", "#498B57")

lines, rects = generate_grid((20, 10), density=0.3)

with open("output-1.png", "wb") as f:
    generate_image("png", (lines, rects), 10, colors, f)
 

错误出来了:

TypeError: unsupported operand type(s) for /: 'list' and 'int'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
c:/Users/Peter Chung/Desktop/MyScript/Python/MondrianScript.py in <module>
      6 
      7 with open("output-1.png", "wb") as f:
----> 8         generate_image("png", (lines, rects), 10, colors, f)
      9 

~/anaconda3/envs/finviz/lib/python3.8/site-packages/mondrianish/__init__.py in generate_image(format, size, stroke_width, colors, stream)
    266 
    267   # Generate image data.
--> 268   grid_size = (int(round(size[0]/stroke_width/7)), int(round(size[1]/stroke_width/7)))
    269   if grid_size[0] < 3 or grid_size[1] < 3: raise ValueError("Stroke width is too large.")
    270   lines, rectangles = generate_grid(grid_size)

TypeError: unsupported operand type(s) for /: 'list' and 'int'

我尝试更改列表和矩形的类型,但都有类似的错误。请指教。谢谢!

【问题讨论】:

linesrects 是列表。您可以将它们作为widthheight 传递给generate_image。您需要传递数字,例如(200, 100),不是一对列表。 @TomKarzes 好的,我现在知道了,但是如果我想更改线条和矩形,然后将它们放回代码并生成图像怎么办? 【参考方案1】:

正确答案在@Tom Karzes 评论中,函数generate_image 期望size 参数有2 个数字。

查看 mondrian 代码,特别是第 268 行,您可以看到它尝试索引 size 参数并期望出现一个数字。

如果您愿意,可以修改函数generate_image() 并让它接受用户生成的网格。

有很多方法可以做到这一点,但我认为用下面的代码替换 __init__.py 中的第 268 到 270 行应该可以:

try:      
    grid_size = (int(round(size[0]/stroke_width/7)), int(round(size[1]/stroke_width/7)))
    if grid_size[0] < 3 or grid_size[1] < 3: raise ValueError("Stroke width is too large.")
    lines, rectangles = generate_grid(grid_size)
except TypeError:
    lines, rectangles = size

这只是一个快速修复,但它现在可以解决您的问题。

【讨论】:

谢谢,但我想增加线条和矩形并保持大小,我想我不知道如何将修改线条和矩形整数输入到 generate_image 函数中。 为此,您需要获取linesrect 并修改坐标,然后将它们反馈给generate_image 函数,按照我上面的建议进行修改。 linesrect 只是一组坐标 TypeError: '

以上是关于细化线条并调整输出 mondrianish 图像错误的主要内容,如果未能解决你的问题,请参考以下文章

颤振形状调整大小并在图像背景画布上拖动

如何用matlab实现对边缘检测后的图像的边缘细化和曲线拟合?

youcans 的 OpenCV 例程200篇127. 形态算法之细化

基于图像轮廓细化分割掩码

Python matplotlib之函数图像绘制、线条rc参数设置

图像的膨胀与腐蚀细化