细化线条并调整输出 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'
我尝试更改列表和矩形的类型,但都有类似的错误。请指教。谢谢!
【问题讨论】:
lines
和 rects
是列表。您可以将它们作为width
和height
传递给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 函数中。 为此,您需要获取lines
和rect
并修改坐标,然后将它们反馈给generate_image
函数,按照我上面的建议进行修改。 lines
和 rect
只是一组坐标
TypeError: '
以上是关于细化线条并调整输出 mondrianish 图像错误的主要内容,如果未能解决你的问题,请参考以下文章
如何用matlab实现对边缘检测后的图像的边缘细化和曲线拟合?
youcans 的 OpenCV 例程200篇127. 形态算法之细化