4条回答 默认 最新
- CSDN专家-HGJ 2021-07-03 00:51关注
命令行传参,运行时你需要将设定的相应参数传递进命令行中才可以。在代码中有二两处要改一下,一是在84行,for c in xrange(len(scheme)),xrange函数是python2中的函数,如果你运行python3的话,将其改为range()函数。二是在第72行和第85行两处构造字符串列表时写法不正确,用python3中的f-string进行改写。在运行时,输入图片放在imgs文件夹根目录,参数file_pattern,用已有文件的名,不带后缀名,test为输出文件子目录,假如有图片wcb1.jpg,wcb.jpg2,那么用命令test_color.py --in_dir imgs --file_pattern wcb --file_indices 1 2 --out_subdir test,即可运行。修改的代码如下,供你作参考并加以修改完善。
import argparse import os from colorsys import hsv_to_rgb import numpy as np import torch from PIL import Image parser = argparse.ArgumentParser() parser.add_argument("--in_dir", type=str, required=True) parser.add_argument("--file_pattern", type=str, required=True) parser.add_argument("--file_indices", type=int, nargs="+", required=True) parser.add_argument("--out_subdir", type=str, default="colour_change") args = parser.parse_args() def change_colours(img, input_colours, colours): h, w, c = img.shape assert (c == 3) assert (img.dtype == np.uint8) new_img = np.copy(img) for i, in_c in enumerate(input_colours): out_c = colours[i] in_c_np = np.array(in_c).reshape((1, 1, 3)) new_img[(img == in_c_np).sum(axis=2) == 3] = out_c return new_img N = 10 hues = torch.linspace(0.0, 1.0, N + 1)[0:-1] # ignore last one input_colours = [list((np.array(hsv_to_rgb(hue, 0.5, 0.8)) * 255.).astype(np.uint8)) for hue in hues] # Colour schemes scheme = [] # basic colours colours = [ [0, 0, 0], [177, 177, 177], [250, 0, 0], [0, 250, 0], [0, 0, 250], [250, 250, 0], [250, 0, 250], [0, 250, 250], [250, 100, 0], [0, 100, 250] ] scheme.append(colours) # Add functional colours saturations = [0.5, 0.6, 0.7, 0.8] values = [0.5, 0.6, 0.7, 0.8] for s in saturations: for v in values: hues = torch.linspace(0.0, 1.0, N + 1)[0:-1] # ignore last one colours = [list((np.array(hsv_to_rgb(hue, s, v)) * 255.).astype(np.uint8)) for hue in hues] scheme.append(colours) # Changes the colour scheme of certain images out_dir = os.path.join(args.in_dir, args.out_subdir) if not os.path.exists(out_dir): os.makedirs(out_dir) for i in args.file_indices: fname = f'{args.file_pattern}{i}.jpg' fpath = os.path.join(args.in_dir, fname) print("fpath: %s..." % fpath) img = np.array(Image.open(fpath)) for c, curr_colours in enumerate(scheme): new_img = change_colours(img, input_colours, curr_colours) new_img = Image.fromarray(new_img) new_img.save(os.path.join(out_dir, "c_%d_%s" % (c, fname))) # make composites for c in range(len(scheme)): fnames = [f'{args.file_pattern}{i}.jpg' for i in args.file_indices] fnames = ["c_%d_%s" % (c, fname) for fname in fnames] fnames = [os.path.join(out_dir, fname) for fname in fnames] images = map(Image.open, fnames) widths, heights = zip(*(i.size for i in images)) total_width = sum(widths) max_height = max(heights) new_im = Image.new('RGB', (total_width, max_height)) x_offset = 0 for im in images: new_im.paste(im, (x_offset, 0)) x_offset += im.size[0] new_im.save(os.path.join(out_dir, "composite_%d.png" % c))
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥30 这是哪个作者做的宝宝起名网站
- ¥60 版本过低apk如何修改可以兼容新的安卓系统
- ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
- ¥50 有数据,怎么建立模型求影响全要素生产率的因素
- ¥50 有数据,怎么用matlab求全要素生产率
- ¥15 TI的insta-spin例程
- ¥15 完成下列问题完成下列问题
- ¥15 C#算法问题, 不知道怎么处理这个数据的转换
- ¥15 YoloV5 第三方库的版本对照问题
- ¥15 请完成下列相关问题!