• python中的一些用法总结


    用python写了一个测试Demo,其中涉及到一些常用的用法,现在记录在这里,方便后续查阅:

    1 python中全局变量的使用:

    引用全局变量,不需要golbal声明,修改全局变量,需要使用global声明,特别地,列表、字典等如果只是修改其中元素的值,可以直接使用全局变量,不需要global声明。

    全局变量在所有程序的外部进行定义,再函数内部使用的时候分为两种情况,一种是只是使用全局变量的值,第二种是对全局变量进行的值进行修改,第一种情况下不会产生歧义,直接使用即可,第二种情况下则有可能会产生究竟是定义一个新变量还是对已有的全局变量的修改,因此需要加上global声明。如上所述,列表,字典等,如果只是修改其中元素的值,则不需要声明,直接引用即可。

    2 字典按照key进行逆序排序,

    排序后的返回值是一个list,而原字典中的名值对被转换为了list中的元组,按照value排序只需要将lambda后面的索引换位[1]即可:

    sort_sim = sorted(DICT_SIM.items(), key = lambda DICT_SIM:DICT_SIM[0], reverse = True)

    3 numpy计算两个向量之间的cos距离

    feat_vector = net.blobs['color_pool4/3x3_s2'].data[0]
    #print 'feat_vector is ', feat_vector
    feat_list = feat_vector.tolist()
    np_probe_feat = np.array(feat_list)
    vec1 = np_probe_feat.astype('float64')
    #print 'vec1 is ', vec1
    for key in DICT_FEAT.keys():
    #print 'DICT_FEAT.keys() is ', DICT_FEAT[key]
    vec2 = DICT_FEAT[key].astype('float64')
    #print 'vec2 is ', vec2
    dis = np.dot(vec1,vec2) / (np.linalg.norm(vec1)*np.linalg.norm(vec2))
    4 string的list转为float型的向量,用于从文件中读取变量到vector
    while True:
    line = f_feat.readline()
    if line:
    image_name = line[: -1]
    image_feat = f_feat.readline()[1:-2]
    image_feat = image_feat.strip().split(',')
    image_feat = map(eval, image_feat)
    array_feat = np.array(image_feat)
    #print 'array_feat is ', array_feat
    #save the image name and its feat into the global dict
    DICT_FEAT[image_name] = array_feat #no same key, so make no if else
    5 PIL类型的image与cv类型的image相互转换
    详见 http://www.mamicode.com/info-detail-1777172.html
    http://blog.csdn.net/dcrmg/article/details/78147219
    import cv2
    from PIL import Image
    import numpy

    image = Image.open("plane.jpg")
    image.show()
    img = cv2.cvtColor(numpy.asarray(image), cv2.COLOR_RGB2BGR)
    cv2.imshow("OpenCV", img)
    cv2.waitKey()


    import cv2
    from PIL import Image
    import numpy

    img = cv2.imread("plane.jpg")
    cv2.imshow("OpenCV", img)
    image = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    image.show()
    cv2.waitKey()

    prob = Image.open(filename)
    cv2_prob = cv2.cvtColor(np.asarray(prob), cv2.COLOR_RGB2BGR)
    prob_constant = cv2.copyMakeBorder(cv2_prob, 10, 10, 10, 10, cv2.BORDER_CONSTANT, value=BORDER_COLOR) #opecv中的补边操作
    prob_PIL = Image.fromarray(cv2.cvtColor(prob_constant, cv2.COLOR_BGR2RGB))
    prob_resize = prob_PIL.resize((int(UNIT_SIZE_w), int(UNIT_SIZE_H)), Image.ANTIALIAS)

    6 将一个向量写到txt文件中,我是先将其转为了list,然后将list强转为string,然后写入到文件中:
    feat_vector = net.blobs['color_pool4/3x3_s2'].data[0]
    feat_list = feat_vector.tolist()
    wf.write(str(feat_list))

    7 利用PIL库将多张小图组合成一张大图:
    def pinjie(images, prob, filename, param):
    target = Image.new('RGB', (UNIT_SIZE_w * (NUM_X + 1), UNIT_SIZE_H * NUM_Y))
    target.paste(prob[0], (UNIT_SIZE_w * NUM_X, 0, UNIT_SIZE_w * (NUM_X + 1), UNIT_SIZE_H))
    for i in range(NUM_Y):
    leftup_x = 0
    leftup_y = UNIT_SIZE_H * i
    rightdown_x = UNIT_SIZE_w
    rightdown_y = UNIT_SIZE_H * (i + 1)
    for j in range(NUM_X):
    count = j + i * NUM_Y
    target.paste(images[count], (leftup_x, leftup_y, rightdown_x, rightdown_y))
    leftup_x = leftup_x + UNIT_SIZE_w
    rightdown_x = rightdown_x + UNIT_SIZE_w
    quality_value = 100
    target.save(param + (filename.strip().split('/'))[-1] + '_merge.jpg', quality = quality_value)
     
     
  • 相关阅读:
    Java原始数据类型
    Java文件教程
    Java.util.ArrayDeque类
    Java 简介
    面向对象的程序设计
    Java8默认方法
    divide方法
    java.lang.Boolean.compareTo()方法实例
    AWT Button类
    Java的核心优势
  • 原文地址:https://www.cnblogs.com/rainsoul/p/7678076.html
Copyright © 2020-2023  润新知