怎么在python代码中输出程序运行结果图片时,设置每隔多少步输出一次

怎么在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()