首页 > 其他分享 >处理一张图片生成10个子图片,而且读取语义文本,比如'red hat'

处理一张图片生成10个子图片,而且读取语义文本,比如'red hat'

时间:2023-11-24 15:03:58浏览次数:28  
标签:box 10 list info im file logger hat 图片

完成了,对两个函数的重构,放入了imagebox.py文件中

我从博客的文章日志,继续处理twitter数据集,重构代码。正向反馈,提高效率。

重构save_10_boximg函数

1.添加im_file参数

2.添加生成boxlist的流程,目的是,让接口只需要调用save_10_boximg函数,就可以完成对子图片的提取。这样就可以为下一步提取特征做准备。无论是文字还是图片的特征。

3.修改函数的功能,让他可以在指定的路径,生成一个以图片命名的目录。把子图片存储在这个子目录中。这样函数功能就符合预期了。

这就包含了创建目录的代码了。

from imagebox import file_2_10_boxes_list
box_list = file_2_10_boxes_list(im_file)

第三个部分即将完成,还剩下最后一个目录的修改

#将目录path,改为dir2,到了此处,重构完成。

   

#3.生成目的子目录
    print(f'im_file:  {im_file}')
    son_dir = im_file.split('/')[-1][:-4]
    obj_dir = path + son_dir +'/'
    print(f'obj_dir :  {obj_dir}')
    dir2 = obj_dir
    try:
        os.mkdir(dir2)
        print('mkdir ' + dir2)
    except FileExistsError:
        pass


可以先用print,后期改为logger.info

Nov,24

中午,我完成了对代码的重构,并完成对应的博客日志,积累自己当天的工作成果。

  1. 将目录path,改为dir2
  2. 发现,生成了9项,应该是10项才对。
  3. 有两张standing man,因此,我需要在保存的时候,重命名。
  4. 把相关的函数整理到模块中。也就是imagebox.py。save_ith_box,和save_10_boximg这两个函数。再修改一下循环引用的语句,把他们注释掉。比如。
    # from imagebox import file_2_10_boxes_list
  5. 注释掉 %matplotlib inline
  6. 将print,改为logger.info
  7. 写下这篇日志

最终我完成了,对两个函数的重构,放入了imagebox.py文件中。

#Nov,24
def save_ith_box(im, box_list,  i = 0, path = '/home/dn/'):
    '''
    save one of 10 box in a big picture
    i: 0 -- 9 ,10个目标框的序号
    box_list : 从预训练模型中的提取的语义信息,包含
    4个坐标值,一个带有感情色彩的字符串,形容词和
    名词组成。
    im :opencv读取的图片的数组值:numpy形式
    path:要存储的目标路径
    '''
    array , att_str= box_list[i]
    logger.info(array)
    logger.info(att_str)

    x1,y1,x2,y2 = array
    x1,y1,x2,y2 = int(x1),int(y1),int(x2),int(y2)
    logger.info('convert to int')

    logger.info('display img by cv2')

    import cv2
    # %matplotlib inline
    # im = cv2.imread(im_file)
    logger.info('cv2.imread return : ' + str(type(im)))
    logger.info('display cv2 to jupyter:')
    
    patch_img = im[y1:y2,x1:x2]
    logger.info(patch_img.shape)
    # cv2_show_img(patch_img, att_str)
    # 在这里需要对保存路径重修命名,因为有重名的部分。red hat.jpg 
    # 改为 0.red hat.jpg ,后期还可以用split()函数处理。聪明,yeah!
    # newpath = path + att_str + '.jpg'
    newpath = path + str(i) + '.' + att_str + '.jpg'
    cv2.imwrite(newpath,patch_img)
    logger.info('success saved : ' + newpath)


def save_10_boximg(im_file, path = '/home/dn/10boximg/'):
    '''
    save 10 box img to a path
    这个里面,需要传递box_list参数
    需要接口:
    im_file : 数据集中的每一张图片的路径。
    im_file可以经过cv2生成im
    因为box_list在for循环中是重复使用的。因此box_list可以放入该函数。
    path:是要要保存的目的路径
    
    '''
    # 测试box_list的生命周期
    # box_list = None
    # 这说明,局部变量box_list并不能进入函数 save_ith_box(i,path)
    # 1.生成im,保存子图片的时候有用
    import cv2
    im = cv2.imread(im_file)
    logger.info('handling img: ' + im_file)
    logger.info('read by opencv')
    #2.生成boxlist数组
    # from imagebox import file_2_10_boxes_list
    box_list = file_2_10_boxes_list(im_file)
    
    #3.生成目的子目录
    logger.info(f'im_file:  {im_file}')
    son_dir = im_file.split('/')[-1][:-4]
    obj_dir = path + son_dir +'/'
    logger.info(f'obj_dir :  {obj_dir}')
    dir2 = obj_dir
    import os
    try:
        os.mkdir(dir2)
        logger.info('mkdir ' + dir2)
    except FileExistsError:
        pass
    
    
    
    for i in range(10):
        logger.info('-'*40)
        logger.info('save ' +str(i)  + 'th img to ' + dir2 )
        #将目录path,改为dir2,到了此处,重构完成。
        save_ith_box(im, box_list,  i, dir2)




标签:box,10,list,info,im,file,logger,hat,图片
From: https://blog.51cto.com/u_11804721/8550007

相关文章

  • Top 10 Strong Earthquakes in the World
    ChileEarthquake(M=9.5)in1960inminutesputmore2millionspeopleinlostliveorhomesAlaskaEarthquake(M=9.2)in1964RussianEarthquake(M=9.0)in1952JapanEarthquake(M=9.0)in2011,2000peoplediedinminutesIndonesianEarthquake......
  • 10_填充每个节点的下一个右侧节点指针
    填充每个节点的下一个右侧节点指针给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:structNode{intval;Node*left;Node*right;Node*next;}填充它的每个next指针,让这个指针指向其下一个右侧节点。如果找不到下一个......
  • 前端必学——实现电商图片放大镜效果(附代码)
    放大镜可以说是前端人必须学会的程序之一,今天的案例为大家展示一下怎么实现放大镜的效果!效果图展示  整个效果就是当鼠标放到展示图上的时候,会出现一个遮罩层以及弹出来一个框展示一个详情图,并且鼠标移动的时候详情图跟着移动,鼠标离开详情图消失。HTML代码:<html><head><style>#sm......
  • Android Alpha 更改图片透明度
    文章目录1、功能描述2、代码架构3、activity_main.xml文件4、alpha_out.xml透明度属性文件5、MainActivity.java逻辑功能文件1、功能描述实现图片透明度的改变点击之后两个图片透明度的改变实现方式不一样1)一个是加载anmixml文件里定义好的透明度改变动画2)一个是再代码......
  • canvas drawable 绘制图片时钟
    文章目录1、功能介绍2、文件结构3、xml文件4、MainActivity.java文件5、自定义的view文件1、功能介绍1)通过实例化drawable资源图片对象2)调用canvas进行图片的绘制和刷新上图指针分别是三个图片2、文件结构3、xml文件<?xmlversion="1.0"encoding="utf-8"?><Relat......
  • 文心一言 VS 讯飞星火 VS chatgpt (142)-- 算法导论12.1 2题
    二、用go语言,二叉搜索树性质与最小堆性质(见6.1节)之间有什么不同?能使用最小堆性质在O(n)时间内按序输出一棵有n个结点树的关键字吗?可以的话,请说明如何做,否则解释理由。文心一言:在二叉搜索树(BinarySearchTree,BST)和最小堆(MinHeap)中,元素的排列顺序都是根据其关键字的......
  • 2023版 STM32实战6 输出比较(PWM)包含F407/F103方式
    输出比较简介和特性-1-只有通用/高级定时器才能输出PWM-2-占空比就是高电平所占的比例-3-输出比较就是输出不同占空比的信号 工作方式说明 -1-1-PWM工作模式  -1-2-有效/无效电平 有效电平可以设置为高或低电平,是自己配置的 周期选择与计算 周期=重装载......
  • win10 windows11 更新失败 更新报错
     cmd管理员模式运行依次运行如下命令后再尝试更新netstopwuauservnetStopcryptSvcnetStopbitsnetStopmsiserverrenC:\Windows\SoftwareDistributionSDistribution.oldrenC:\Windows\System32\catroot2Catroot2.oldnetStartwuauservnetstartcryptS......
  • 为美好的世界献上佐罗兔(2)基于docker安装ChatGLM3
    佐罗兔——rabbitzorro首先我找了一个B站的教学视频,但是他不是基于Docker的https://www.bilibili.com/video/BV1gN4y1r7RX作者一看就是专业讲课的,说三句水两句,不过教程的结构还是可以借鉴的。我的PC配置:N卡RTX306012GB板、i5、32G内存傻瓜安装了dockerDesktop对docke......
  • 初中英语优秀范文100篇-006 The Person I Admire Most
    记忆树1ThepersonIadmiremostismyfather.翻译我最崇拜的人是我的父亲。简化记忆最崇拜的人句子结构主句:ThepersonIadmiremostismyfather.主语:Theperson(这个人)。谓语:is(是)。定语从句:Iadmiremost(我最崇拜的)修饰主语Theperson,表示“这个人”是我最崇拜......