首页 > 编程语言 >Python学习日记 2023年8月22日

Python学习日记 2023年8月22日

时间:2023-08-22 18:35:42浏览次数:50  
标签:22 Python blocksize image args cv2 2023 import numpy

import glob
import argparse
import cv2
import numpy
from tqdm import tqdm
from itertools import product

def parsArgs():
    parser = argparse.ArgumentParser('拼接马赛克图片')
    parser.add_argument('--targetpath',type=str,default='3.jpg',help='目标图像路径')
    parser.add_argument('--outputpath',type=str,default='output.jpg',help='输出图像的路径')
    parser.add_argument('--sourcepath',type=str,default='picture2',help='拼接图片所在路径')
    parser.add_argument('--blocksize',type=int,default=15,help='马赛克块大小')

    args = parser.parse_args()
    
    return args
def readSourceImages(sourcepath,blocksize):
    print('开始读取图像数据')

    sourceimages = []
    avgclolrs = []

    for path in tqdm(glob.glob("{}/*.jpg".format(sourcepath))):
        image = cv2.imread(path,cv2.IMREAD_COLOR)
        if image.shape[-1] != 3:
            continue
        image = cv2.resize(image,(blocksize,blocksize))
        avgcolor = numpy.sum(numpy.sum(image,axis=0),axis=0) / (blocksize * blocksize)
        sourceimages.append(image)
        avgclolrs.append(avgcolor)
    
    print('读取结束')
    return sourceimages,numpy.array(avgclolrs)

def main(args):
    targetimage = cv2.imread(args.targetpath)
    outputimage = numpy.zeros(targetimage.shape,numpy.uint8)
    sourceimages,avgcolors = readSourceImages(args.sourcepath,args.blocksize)
    print('开始制作')
    for i ,j in tqdm(product(range(int(targetimage.shape[1]/args.blocksize)),
                             range(int(targetimage.shape[0]/args.blocksize)))):
        block = targetimage[j * args.blocksize:(j + 1) * args.blocksize, i * args.blocksize:(i+1)* args.blocksize,:]
        avgcolor = numpy.sum(numpy.sum(block,axis=0),axis=0) / (args.blocksize *args.blocksize)
        distances = numpy.linalg.norm(avgcolor - avgcolors,axis=1)
        idx = numpy.argmin(distances)
        outputimage[j * args.blocksize: (j + 1) * args.blocksize, i * args.blocksize: (i + 1) * args.blocksize, :] = \
            sourceimages[idx]
    cv2.imwrite(args.outputpath, outputimage)
    cv2.imshow('result',outputimage)
    print('完成')

if __name__ == '__main__':
    main(parsArgs())

跟着写完了,明天看视频学习下,程序运行成功,中间遇到的问题,图片一开始是中文,运行失败了,之后名称批量修改成数字,运行成功类似下面的效果:

Python学习日记 2023年8月22日_程序运行


明天继续学习看看把这个优化下,图片能更加清晰,放大后的小的图片像素也能比较清楚。


标签:22,Python,blocksize,image,args,cv2,2023,import,numpy
From: https://blog.51cto.com/u_2469839/7191933

相关文章

  • 2023年小程序游戏可以玩出哪些花样?
    疫情过后,一地鸡毛。游戏行业的日子也不好过。来看看移动游戏收入:2022年,移动游戏收入达到920亿美元,同比下降6.4%。这告诉我们,2022年对移动游戏市场来说是一个小挫折。但不管是下挫还是上升,移动游戏市场依然代表了大趋势,手机游戏在全球游戏市场中占据的份额也越来越大。据Newzoo的数......
  • python新手小白 初入 第一节
    建议:先基础,后入门常用功能:如何书写标题:六级标题(1~6)  1.几个警号就是代表几级标题例如##########2.ctrl+0可让标题回到普通文本状态。3.快捷键方式:ctrl+数字#数字是几就是几级标题如何书写无序标题1.*加空格 快捷键ctrl+shift+]2.连续按两下回车键退出无序标题如何......
  • 2023-08-22 uni-popup 默认弹出显示
    奇怪!!uni的弹窗组件明明是默认隐藏的,我又没有做弹出的业务,为什么就蹦出来了呢??重新编译也不行,又没有报错。。就像uni-popup完全没生效,直接显示了里面的内容===========================若干分钟后 ===========================啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊......
  • 20230618 java.util.concurrent.CompletableFuture
    介绍java.util.concurrent.CompletableFuturepublicclassCompletableFuture<T>implementsFuture<T>,CompletionStage<T>APIstaticsupplyAsync<U>CompletableFuture<U>supplyAsync(Supplier<U>supplier)<U>Comple......
  • 20230618 java.util.concurrent.CompletionStage
    介绍java.util.concurrent.CompletionStagepublicinterfaceCompletionStage<T>java.util.concurrent.CompletableFuture的父接口API注意事项:所有方法都有类似的xxAsync以及重载,只详细列一下thenApply,其他不列出来有无返回值,可以通过看函数类型处理单个Future......
  • 20230713 java.util.concurrent.ExecutorService
    介绍java.util.concurrent.ExecutorServicepublicinterfaceExecutorServiceextendsExecutorAPIshutdownshutdownNowisShutdownisTerminatedawaitTerminationsubmitFuture<?>submit(Runnabletask);<T>Future<T>submit(Runna......
  • 20230713 java.util.concurrent.ScheduledExecutorService
    介绍java.util.concurrent.ScheduledExecutorServicepublicinterfaceScheduledExecutorServiceextendsExecutorServiceAPIschedulepublicScheduledFuture<?>schedule(Runnablecommand,longdelay,TimeUnitunit);public<V>ScheduledFuture<......
  • 20230713 java.util.concurrent.ThreadPoolExecutor
    介绍java.util.concurrent.ThreadPoolExecutorpublicclassThreadPoolExecutorextendsAbstractExecutorServiceAPI构造器ThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime,TimeUnitunit,BlockingQueue<Runnable>workQueue)Thr......
  • 20230618 java.util.stream.BaseStream
    介绍java.util.stream.BaseStreampublicinterfaceBaseStream<T,SextendsBaseStream<T,S>>extendsAutoCloseableAPIiterator返回流的迭代器终结操作spliterator返回可拆分迭代器终结操作isParallel是否并行流sequential返回一个等效的串行流中......
  • 20230619 java.util.IntSummaryStatistics
    介绍java.util.IntSummaryStatisticspublicclassIntSummaryStatisticsimplementsIntConsumer统计的指标:count,sum,min,average,maxAPI构造器IntSummaryStatistics()IntSummaryStatistics(longcount,intmin,intmax,longsum)publiccombinevoidcombi......