我怎样才能从一张图片中提取一个纹理,然后用Python把它转换成一张有相同纹理的大图片呢?

x4shl7ld  于 2022-12-28  发布在  Python
关注(0)|答案(1)|浏览(206)

假设我有下面的图像,我想使用其中的土壤颜色部分来创建另一个240x240的图像,只有这个纹理。我也有污染部分的遮罩。

wbgh16ku

wbgh16ku1#

您应该能够根据http://www.cs.jhu.edu/~misha/Fall07/Papers/Perez03.pdf在Python/OpenCV中执行泊松无缝混合(请参见https://docs.opencv.org/4.1.1/df/da0/group__photo__clone.html#ga2bf426e4c93a6b1f21705513dfeca49d),但是我尝试了一下,在我的OpenCV4.6.0版本中,它似乎不适用于这种情况
但是如果你愿意使用另一个软件工具,比如Imagemagick(使用子进程调用从Python调用)或Python Wand,它基于Imagemagick(假设它是最新的Imagemagick),那么下面的代码就可以工作:
纹理的输入裁剪:

这个想法是使边界的每一边都是它的平均值,它的对边作为背景图像。蒙版只是一个大小相同的白色图像,边缘是黑色的。在Imagemagick中,无缝混合只是-composite ... -composite的另一个选项。下面创建背景图像和蒙版,然后将它们合成,然后将其平铺在3x3数组中。

magick old_texture.png +write mpr:img \
\( mpr:img -gravity east -crop 1x+0+0 +repage \) \
\( mpr:img -gravity west -crop 1x+0+0 +repage \) \
\( mpr:img -gravity north -crop x1+0+0 +repage \) \
\( mpr:img -gravity south -crop x1+0+0 +repage \) \
\( \
-clone 1,2 -evaluate-sequence mean +write mpr:LR +delete \
-clone 3,4 -evaluate-sequence mean +write mpr:TB +delete \
\) \
-delete 0-4 \
mpr:LR \( mpr:img -shave 1x0 \) mpr:LR +append \
-shave 0x1 mpr:TB +swap mpr:TB -append \
old_texture_background.png

magick old_texture.png -fill white -colorize 100 \
-shave 1x1 -bordercolor black -border 1 \
old_texture_mask.png

magick old_texture_background.png old_texture.png old_texture_mask.png \
-define compose:args=400x0.00002+100 -compose seamless-blend \
-composite \
-duplicate 2 +append \
-duplicate 2 -append \
old_texture_seamless_tiled_3x3.png

背景图像:

蒙片图像:

生成的3x3平铺无缝混合:

相关问题