怎么在python代码中输出程序运行结果图片时,设置每隔多少步输出一次
print("timestep:{}".format(i))
f_behind = copy.deepcopy(cm.f)
g_behind = copy.deepcopy(cm.g)
stream(cm.f, cm.g)
bb.halfway_bounceback_circle(side_list, concave_list, convex_list, f_behind, g_behind, cm.f, cm.g)
cm.zou_he_boundary_inlet()
cm.zou_he_boundary_outlet()
cm.rho = cm.getRho()
cm.udpatePsi()
cm.nabla_psix = cm.getNabla_psix()
cm.nabla_psiy = cm.getNabla_psiy()
cm.nabla_psi2 = cm.getNabla_psi2()
cm.mu = cm.getMu()
cm.ux = cm.getUx()
cm.uy = cm.getUy()
cm.p = cm.getP()
cm.mix_tau = cm.getMix_tau()
y = [i for i in range(H)]
x = [i for i in range(W)]
plt.figure()
plt.pcolor(x, y, cm.psi, cmap='RdBu')
plt.colorbar()
plt.gca().set_aspect('equal', adjustable='box')
plt.show()
以上是输出图片的部分程序代码,麻烦教一下怎么处理
完整的代码呢?有完整代码可以直接帮你改
没有只能给你思路了
比如
for ...:
你的代码
可以这样
steps = 0
for ... :
if steps % 10 == 0:
输出
steps += 1
你的代码
import matplotlib.pyplot as plt
# 定义你的函数或操作,这里以一个简单的示例函数为例
def example_function(x):
return x ** 2
# 设置每隔多少步输出一次图片
output_frequency = 10
# 设置迭代次数
iterations = 100
for i in range(iterations + 1):
result = example_function(i)
# 检查是否到达输出频率的步数,如果是,则输出图形
if i % output_frequency == 0:
plt.plot(i, result, 'ro') # 将数据点绘制为红色圆点
plt.xlabel('Iterations')
plt.ylabel('Result')
plt.title('Result Visualization')
plt.grid(True)
plt.show()
# 在最后输出一张图片,确保最终结果也被绘制出来
plt.plot(range(iterations + 1), [example_function(i) for i in range(iterations + 1)], 'ro')
plt.xlabel('Iterations')
plt.ylabel('Result')
plt.title('Result Visualization')
plt.grid(True)
plt.show()
在Python代码中,你可以使用matplotlib库来绘制图形,并使用适当的设置来控制在程序运行期间每隔多少步输出一次图片。这通常用于观察程序的执行过程或输出结果的变化。在这个示例代码中,我们定义了一个简单的函数example_function(x),然后设置了output_frequency变量,表示每隔多少步输出一次图片。在每一步迭代中,我们计算函数的结果并检查当前步数是否到达了输出频率,如果是,则调用plt.show()来绘制当前的结果图像。在迭代结束后,再绘制一次以确保最终结果也被输出。你可以根据自己的需要和代码结构,将这个示例代码嵌入到你的程序中,用于输出程序运行结果图片。
import argparse#命令行参数解析
import os
import numpy as np
from PIL import Image #标准python图形处理库
def getImages(imageDir):
"""
从给定目录中加载所有替换图像
@param {str} imageDir 目录路径
@return {List[Image]}
"""
#将imageDir中的文件放入一个列表,file就是一个文件名字组成的列表
files = os.listdir(imageDir)
images = []
for file in files:
#得到文件的绝对路径
filePath = os.path.abspath(os.path.join(imageDir, file))
try:
#读文件
fp = open(filePath, 'rb')
#打开文件
im = Image.open(fp)#为了节约电脑资源,利用 Image.open() 将文件句柄 fp 传入 PIL。图像加载完成后,立即关闭文件句柄释放系统资源
#确定图像信息
images.append(im)
#加载图像
im.load()
#关闭文件
fp.close()
except:
# ?????
#print('Invalid images: ' , filePath)
print("Invalid image: %s" % (filePath,))
return images
def getAverageRGB(image):
"""
计算图像的平均RGB值
将图形中包含的每个像素点的R\G\B 值分别累加,然后除以像素点数,得到图形的平均R G B
@param {Image} image PIL Image 对象
@return {Tuple[int, int, int]} 平均RGB值
"""
#计算像素点数
npixels = image.size[0] * image.size[1]
#获得图像每种颜色及其计数的
#[(c1,(r1, g1, b1)), (c2, (r2, g2, b2)), ...]
cols = image.getcolors(npixels)
#获得每种颜色的R G B累加值
#[(c1 *r1, c1 * g1, c1 * b1),(c2 *r2, c2 * g2, c2 * b2), ...]
sumRGB = [(x[0] * x[1][0], x[0] * x[1][1], x[0] * x[1][2]) for x in cols]
#计算所有颜色的R,G,B平均值
#x = (c1 *r1, c2 *r2, ...),
#(c1 * g1, c2 *g2, ...),
#(c1 *b1, c2 *b2, ...)
avg = tuple([int(sum(x) /npixels) for x in zip(*sumRGB)])
return avg
def splitImage(image, size):
"""
将图像按照网格分成多个小图像
@param {Image} image Pil Image
@return {List[Image]} 小图像列表
"""
#获得原始图像尺寸
W, H = image.size[0], image.size[1]
# print(image.size)
# print(size[1])
#分划的小图像个数 m * n
m, n = size
#小图像的尺寸
w, h = int(W / n), int(H / m)
#分割好的小图像放在列表中
imgs = []
#遍历
for j in range(m):
for i in range(n):
#得到小图像并加入到imgs列表
imgs.append(image.crop((i * w, j *h, (i + 1) * w, (j + 1) * h)))
return imgs
def getBestMatchIndex(input_avg, avgs):
"""
找出颜色最接近的索引
@param {Tuple[int, int, int]} input_avg 目标颜色值
@param {List[Tuple[int, int, int]]} avgs 要搜索的颜色值列表
@return {int} 命中元素的索引
"""
index = 0
min_index = 0
#距离初始化为无穷大
min_dist = float("inf")
dis = []
for val in avgs:
dist = (val[0] - input_avg[0]) * (val[0] - input_avg[0]) + (val[1] - input_avg[1]) * (val[1] - input_avg[1]) + (val[2] - input_avg[2]) * (val[2] - input_avg[2])
if dist < min_dist:
min_dist = dist
min_index = index
index += 1
dis.append(dist)
return min_index
def createImageGrid(images, dims):
"""
将图形列表里的小图像按先行后列的顺序拼接为一个大图像
@param {List[Image]} images 小图像列表
@param {Tuple[int, int]} dims 大图像的行数和列数
@return Image 拼接得到的大图像
"""
m, n = dims
#确保小图像个数满足要求
assert m *n == len(images)
#计算小图像的最大尺寸
width = max([img.size[0] for img in images])
height = max([img.size[1] for img in images])
#创建大图像对象
grid_img = Image.new('RGB', (n * width , m * height ))
#添加3*3像素的小黑快,置于粘贴像素之间,产生不一样的效果
gap = Image.new('RGB', (3, 3))
#将小图像粘贴到大图像
for index in range(len(images)):
#计算要粘贴到的行
row = int(index / n)
#计算粘贴到的列
col = index - n * row
#粘贴
grid_img.paste(images[index], (col * width , row * height ) )
#将小黑快粘贴好
grid_img.paste(gap, (col * width , row * height ))
return grid_img
def createPhotomosaic(target_image, input_images, grid_size, reuse_images = True):
"""
图片马赛克生成
@param {Image} target_image 目标图形
@param {List[Image]} input_images 替换图像列表
@param {Tuple[int, int]} grid_size 网格行数和列数
@param{bool} reuse_images 是否重复使用替换图像
@return {Image} 马赛克图像
"""
#将目标图像切成网格小图像
print('Spliting input image ...')
#x分割好的小图像列表
target_images = splitImage(target_image, grid_size)
#
print('finding image matches ...')
output_images = []
#分10组进行
count = 0
batch_size = int(len(target_images) / 10)
#计算替换图像列表里每个图像的颜色平均值
avgs = []
for img in input_images:
avgs.append(getAverageRGB(img))
#
for img in target_images:
avg = getAverageRGB(img)
#z找到最匹配的小图像,添加到 output_images中
match_index = getBestMatchIndex(avg, avgs)
output_images.append(input_images[match_index])
#完成一组,打印进度信息???
if count > 0 and batch_size > 10 and count % batch_size == 0:
print('processsed %d of %d...' %(count, len(target_images)))
count += 1
#不允许重用替换图像,用过后,就从列表里移除
if not reuse_images:
input_images.remove(match)
#将output_images图像按照网格大小拼接成图像
print('creating mosaic...')
mosaic_image = createImageGrid(output_images, grid_size)
return mosaic_image
def main():
#定义程序接收的命令行参数
parser = argparse.ArgumentParser(
description = 'Cteate a photomosaic from input images')
parser.add_argument('--target-image', dest = 'target_image', required = True)
parser.add_argument('--input-folder', dest = 'input_folder',required = True)
parser.add_argument('--grid-size', nargs = 2,
dest = 'grid_size', required = True)
parser.add_argument('--output-file', dest = 'outfile', required = False)
#解析命令行参数
args = parser.parse_args()
#网格大小
grid_size = (int(args.grid_size[0]), int(args.grid_size[1]))
#马赛克图像保存路径,默认为 mosaic.png
output_filename = 'mosaic.png'
if args.outfile:
ourput_filename = args.outfile
#打开目标图像
print('reaing target image...')
target_image =Image.open(args.target_image)
#加载替换图像
print('reading input images...')
input_images = getImages(args.input_folder)
#如果替换图形列表为空 那么退出
if input_images == []:
print('No input images found in '+ args.input_folder)
exit()
#将替换图像放到指定的网格大小
print('restzing images ...')
dims = (int(target_image.size[0] / grid_size[1]),
int(target_image.size[1] / grid_size[0]))
for img in input_images:
img.thumbnail(dims)
#生成马赛克图像
print('starting photomosaic creation...')
mosaic_image = createPhotomosaic(target_image, input_images, grid_size)
#保存图像
mosaic_image.save(output_filename, 'PNG')
print("saved output to %s" % (output_filename,))
print('Done!')
if __name__ == '__main__':
main()