美文网首页Python学习python学习笔记生活不易 我用python
python学习笔记6——文件操作来生成船只侧面图像的描述文件

python学习笔记6——文件操作来生成船只侧面图像的描述文件

作者: 在河之简 | 来源:发表于2015-08-25 17:14 被阅读81次

    最近在做船只检测的工作需要大量的正样本,之前的一些样本各种形态的船只都有,这一次训练分类器希望使用只含船只侧面的图像,这样检测船的侧面的成功率可能会提高一点。这样就需要大量的船只侧面图像,并生成描述文件。这里我们之前已经生成过全船只的描述文件,只需要挑出侧面的图像,然后根据有的图像从原描述文件中选取存在的图像的描述信息保存在新的描述文件
    描述文件的内容大概是这个样子的

    224871_0.jpg 1 6 50 248 82
    224871_10.jpg 1 16 79 269 89
    224871_11.jpg 1 80 53 122 40
    224871_12.jpg 1 53 57 219 79
    224871_13.jpg 1 16 94 251 72
    224871_14.jpg 1 20 79 197 66
    224871_15.jpg 1 6 69 294 98
    224871_16.jpg 1 91 86 155 54
    224871_17.jpg 1 51 70 202 72
    224871_18.jpg 1 6 42 294 99
    224871_19.jpg 1 9 36 291 98
    224871_1.jpg 1 37 77 243 81
    224871_20.jpg 1 27 27 248 83
    224871_21.jpg 1 40 63 250 80
    224871_22.jpg 1 18 65 234 78
    224871_23.jpg 1 12 51 272 89
    224871_24.jpg 1 21 83 252 73
    224871_25.jpg 1 32 62 230 75
    224871_26.jpg 1 0 61 298 99
    224871_27.jpg 1 8 100 271 83
    224871_28.jpg 1 0 60 275 92
    224871_29.jpg 1 72 100 151 49
    224871_2.jpg 1 62 46 179 60
    224871_30.jpg 1 137 64 149 49
    224871_31.jpg 1 34 119 240 80
    

    思路很简单,就是读一行看看那个jpg文件在不在文件夹里面,如果在的话,就把这行复制进新的描述文件。

    第一个代码

    import glob,os
    unfound=0 (u'D:/IP_CV_WorkSpace/Img/第三批分类器/pos8/*.jpg')]
    with open(u'D:/IP_CV_WorkSpace/Img/第三批分类器/pos8/info.txt', 'r') as f:
        with open(u'D:/IP_CV_WorkSpace/Img/第三批分类器/pos8/pos8.txt', 'w') as w:
            for filetitle in f.readlines():
                if filetitle.split(u' ')[0] in [os.path.split(filename)[-1] for filename in glob.glob (u'D:/IP_CV_WorkSpace/Img/第三批分类器/pos8/*.jpg')]:
                    w.write(filetitle)
                else:
                    unfound=unfound+1        
            print u'一共有%s个图片没找到' % unfound   
    

    这个代码挺短的,但是云讯速度却很慢原因在于第6行每次都要算一下整个集合,太慢了,所以可以优化

    第二个代码

    import glob,os
    unfound,filenamelist=0,[os.path.split(filename)[-1] for filename in glob.glob (u'D:/IP_CV_WorkSpace/Img/第三批分类器/pos8/*.jpg')]
    with open(u'D:/IP_CV_WorkSpace/Img/第三批分类器/pos8/info.txt', 'r') as f:
        with open(u'D:/IP_CV_WorkSpace/Img/第三批分类器/pos8/pos8.txt', 'w') as w:
            for filetitle in f.readlines():
                if filetitle.split(u' ')[0] in filenamelist:
                    w.write(filetitle)
                else:
                    unfound=unfound+1        
            print u'一共有%s个图片没找到' % unfound   
    

    同样行数的代码速度提高了

    第三个代码

    import glob,os
    unfound,filenamelist=0,[os.path.split(filename)[-1] for filename in glob.glob (u'D:/IP_CV_WorkSpace/Img/第三批分类器/pos8/*.jpg')]
    with open(u'D:/IP_CV_WorkSpace/Img/第三批分类器/pos8/info.txt', 'r') as f:
        with open(u'D:/IP_CV_WorkSpace/Img/第三批分类器/pos8/pos8.txt', 'w') as w:
            filelist=f.readlines();
            found=[w.write(filetitle) for filetitle in filelist if filetitle.split(u' ')[0] in filenamelist]        
            print u'一共有%s个图片没找到' % (len(filelist)-len(found))
    

    使用列表生成器代码更短啦

    版权声明:本文为博主原创文章,欢迎转载和分享,但请声明出处
    http://blog.csdn.net/zhzz2012/article/details/47979387

    相关文章

      网友评论

        本文标题: python学习笔记6——文件操作来生成船只侧面图像的描述文件

        本文链接:https://www.haomeiwen.com/subject/hxsqcttx.html