python常用语句

第一阶段

1 python

rand、randn、randint

# 随机生成数
import numpy as np
np.random.seed(1)
a = np.random.rand()
print(a)  # 0.417022004702574

# 写法2
np.random.seed(1)  # 如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。
from numpy import random
b = random.rand()  # 必须在rand前面再加一次同一个种子才能保证生成的随机数相同
print(b)  # 0.417022004702574

# 写法3
from numpy.random import rand
c = rand()
print(c)  # 0.7203244934421581

# 创建随机列表
d = rand(4)
# [1.14374817e-04 3.02332573e-01 1.46755891e-01 9.23385948e-02]
print(d)
# 创建随机矩阵
e = rand(2, 4)
print(e)
# [[0.18626021 0.34556073 0.39676747 0.53881673]
#  [0.41919451 0.6852195  0.20445225 0.87811744]]

# rand()给定的形状创建一个数组,并在数组中加入在[0,1]之间均匀分布的随机样本。
# randn()以给定的形状创建一个数组,数组元素来符合标准正态分布N(0,1)
# randint() numpy.random.randint(low,high=None,size=None,dtype)
# 生成在半开半闭区间[low,high)上离散均匀分布的整数值;若high=None,则取值区间变为[0,low)

print(np.random.randn(5))  # [ 1.46210794 -2.06014071 -0.3224172  -0.38405435  1.13376944]
print(np.random.randint(5,size=(2,4)))
# [[1 0 4 1]
#  [0 0 3 2]]

print(np.zeros((3,4)))
print(np.ones((3,4)))  # 注意这两个函数参数是shape,多加一个括号


dict

A = {"1":2, "a":22}
print(A.items())  # dict_items([('1', 2), ('a', 22)])
print(A.keys())  # dict_keys(['1', 'a'])
print(A.values())  # dict_values([2, 22])
print(list(A.items()))  # [('1', 2), ('a', 22)]
print(list(A.keys()))  # ['1', 'a']
print(list(A.values()))  # [2, 22]

print(range(5))
print(range(0, 5))
print(range(0, 5, 1))
print(range(0, 5, 2))
a = [(i, j) for i, j in enumerate(range(5))]
print(a)  # [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
b = dict(a)
# 直接写:b = dict([(i, j) for i, j in enumerate(range(5))])
print(b)  # {0: 0, 1: 1, 2: 2, 3: 3, 4: 4}

npy文件的读写

# .npy文件是numpy专用的二进制文件
arr = np.array([[1, 2], [3, 4]])

# 保存.npy文件
np.save("arr.npy", arr)

# 读取.npy文件
arr1 = np.load("arr.npy")
print(arr1)

xml、yml、json文件的读写

numpy的npz很好用,但是c++不支持。使用opencv函数保存,然后再在c++与python之间交换数据比较方便。
cv2.FileStorage支持 yml,xml,json三种保存格式,可以保存numpy和opencv mat格式
还可以再附加 .gz 后辍名(例如 abc.yml.gz),自动变成压缩格式,也可读、写

import cv2
import numpy as np

fs = cv2.FileStorage('abc.xml', cv2.FileStorage_WRITE)
# fs = cv2.FileStorage('abc.xml.gz', cv2.FileStorage_WRITE)
# fs = cv2.FileStorage('abc.json', cv2.FileStorage_WRITE)
# fs = cv2.FileStorage('abc.yml', cv2.FileStorage_WRITE)
fs.write('mat2', np.random.randint(0, 10, [2, 2]))  # label不要是数字
fs.write('num1', 1)
fs.write('str1', 'abc')
# 关闭文件
fs.release()

fs2 = cv2.FileStorage('abc.xml', cv2.FileStorage_READ)
# fs2 = cv2.FileStorage('abc.xml.gz', cv2.FileStorage_READ)
# fs2 = cv2.FileStorage('abc.json', cv2.FileStorage_READ)
# fs2 = cv2.FileStorage('abc.yml', cv2.FileStorage_READ)
mat2 = fs2.getNode('mat2').mat()
num1 = fs2.getNode('num1').real()
str1 = fs2.getNode('str1').string()
# 关闭文件
fs2.release()

print(mat2)
print(num1)
print(str1)

注意:除了numpy还可以保存cv2.imread()读取进来的opencv mat的格式

p = cv2.imread("DR_ma.png")
f = cv2.FileStorage("p.xml", cv2.FileStorage_WRITE)
f.write("arr", p)
f.release()

fr = cv2.FileStorage("p.xml", cv2.FileStorage_READ)
a = fr.getNode("arr").mat()
cv2.imshow("1", a)
cv2.waitKey(0)
fr.release()

读写csv文件

# 1 方法1
# 1.1 写数据:列表、元组等逗号分隔符
# coding:utf-8
import csv

data = [("1", '软'), ("2", '软'), ("3", '软'), ("4", '软'), ("5", '软')]
f = open('1.csv', 'w')
writer = csv.writer(f)
for i in data:
    writer.writerow(i)
f.close()
# 注意:
# # (1)对于乱码可以使用下面语句
# import codecs
# f = codecs.open('222.csv','w','gbk')  # 不存在自动换行的问题
# # (2)对于返回结果会出现自动换行
data = [("1", 'a'), ("2", 'a'), ("3", 'a'), ("4", 'b'), ("5", 'dd')]
with open("1.csv", 'w', newline='') as f:  # 写了这句话就不用写f.close(), 中文会乱码
    writer = csv.writer(f)
    for i in data:
        writer.writerow(i)

# 1.2 读数据:列表、元组等逗号分隔符
f = open("1.csv", 'r')
reader = csv.reader(f)
for i in reader:  # 或者for i in list(reader):
    print(i)


# 2 方法2
# 2.1 写数据:字典的写入
import csv

data = {'id': '123', 'name': 'anjing', 'age': '26'}
data1 = {'id': '12323', 'name': 'keyi', 'age': '44'}
# 加入参数“newline=''”
with open('123.csv', 'w', newline='')as f:
    fieldnames = {'id', 'name', 'age'}
    writer = csv.DictWriter(f, fieldnames=fieldnames)  # 写表头
    writer.writeheader()
    writer.writerow(data)
    writer.writerow(data1)

# 2.2 读数据
f1 = open('123.csv', 'r')
reader = csv.DictReader(f1)
for i in reader:
    # print(i)
    # OrderedDict([('id', '123'), ('age', '26'), ('name', 'anjing')])
    # OrderedDict([('id', '12323'), ('age', '44'), ('name', 'keyi')])
    print(i['id'], i['name'])
f1.close()
# 注意:也可以直接使用该语句读入reader = csv.reader(f1)

写、读txt文件

# 写入文件
f = open("./1.txt", 'w')
f.write("file_name"+"\n")  # 不加换行,下面那句接在这句的后面
f.write("file_name1"+"\n")  # 写入必须是str类型
f.write("file_name2"+"\n")
# f.write(1)  直接写入数字是不行的
f.close()

# 读txt文件
f = open("./1.txt", 'r')
f_li = f.readlines()
print(f_li)  # ['file_name\n', 'file_name1\n', 'file_name2\n']
f.close()

字符转数字,数字转字符

# string转整数
a = "1.233"
print(float(a))  # 1.233
print(int(float(a)))  # 1
# 如果string是整数,int(str)
# 如果string是小数,int(float(str))
#
# 整数、数字转string
a = 99
str1 = "a" + str(a)
str2 = "a{}".format(a)

find函数

a = "123fsdfsdkf"
print(a.find("k"))  # 9
print(a.find("f"))  # 3
print(a.find("a"))  # -1
print(a[9])  # k
# find()如果没有该元素,返回-1,如果存在则返回第一次出现的下标(从0开始算起)

获取矩阵mat元素

print(shapes[0][39, 0])  # 错误print(shapes[0](39, 0))

import numpy as np
b = np.random.rand(3, 5, 2)
print(b)
# [[[0.87894132 0.71210186]
#   [0.29442634 0.2830965 ]
#   [0.14670712 0.9505772 ]
#   [0.64654494 0.11882201]
#   [0.93636663 0.06581336]]
#  [[0.47807271 0.77892754]
#   [0.86550866 0.11489605]
#   [0.40793893 0.62676321]
#   [0.66120659 0.45707809]
#   [0.94441816 0.09942411]]
#  [[0.66940067 0.45519547]
#   [0.69406268 0.15377414]
#   [0.04534706 0.03436059]
#   [0.93555508 0.50169304]
#   [0.36718846 0.00947385]]]
print(b[0])
# [[0.87894132 0.71210186]
#   [0.29442634 0.2830965 ]
#   [0.14670712 0.9505772 ]
#   [0.64654494 0.11882201]
#   [0.93636663 0.06581336]]
print(b[0, 0])  # [0.87894132 0.71210186]
print(b[0][0])  # [0.87894132 0.71210186]与上述效果相同
print(b[1, 0])  # [0.47807271 0.77892754]

import cv2
d = cv2.imread("DR_ma.png")  # 图像大小为,1280(宽)*720(高)*3(深)
print(d.shape)  # (720, 1280, 3)
print(d[500, 303])  # [23 23 23]
cv2.imshow("1", d)
cv2.waitKey(100)
crop = d[200:520, 500:750]  # 起点坐标:x(500, 200);终点坐标:y(750, 520),坐标为(宽,高)
cv2.imshow("2", crop)
cv2.waitKey(100)

os获取文件路径

import os

# 获取当前路径
print(os.getcwd())
print(os.path.abspath(os.path.dirname(__file__)))
print(os.path.abspath(r"."))

# 获取上级目录
print(os.path.abspath(r".."))
# 获取上上级目录
print(os.path.abspath(r"../.."))

# 获取指定路径目录,以及上级、上上级目录
path = ".\\model.png"
print(os.path.dirname(path))  # 当前
print(os.path.abspath(os.path.join(os.path.dirname(path), "..")))  # 上级
print(os.path.abspath(os.path.join(os.path.dirname(path), "../..")))  # 上上级
# path = ".\\path\\"
# print(os.path.dirname(path))  # ".\\path"
# print(os.path.abspath(os.path.join(os.path.dirname(path), "..")))  # ".\\"

# 创建目录
path1 = "./path1"
if not os.path.exists(path1):
    os.makedirs(path1)

time

import time

t1 = time.time()
time.sleep(5)  # 数字单位为秒
t2 = time.time()
print(t2-t1)  # 输出的单位是秒


time1 = time.strftime("%m%d%H%M%S", time.localtime())
time1 = time.strftime("%y%m%d%H%M%S", time.localtime())  # 0201100024
print(time1)  # 210201100024
time1 = time.strftime("%Y%m%d%H%M%S", time.localtime()) # 年月日小写,时分秒小写(年大写表示四位,小写表示后两位)


 print(time1)  # 20210201100042

numpy

创建数组

import numpy as np
a = np.array([0] * 3 + [1] * 6)  # [0 0 0 1 1 1 1 1 1]
print(a)

列表和矩阵的最大值获取

li = [[],[]]
li[0] = [1, 2, 3]
li[1] = [2, 4, 5]
print(li)

print(max(li[0]))  # ��������
# print(li[0].max())  # 'list' object has no attribute 'max'


import numpy as np
arr = np.array(li)
print(arr[0, :].max())
# print(max(arr))  # û��ȫ�����ֵ
print(max(arr[0, :]))

print(arr.shape)
for i in range(arr.shape[0]):
    print("��{}��".format(i))
    tmp = arr[i,:]
    print(max(tmp))
    arr1 = (tmp-tmp.min()+1) / (tmp.max() - tmp.min()+1)
    print(arr1)

2 cv2

cv2.imread()

在这里插入图片描述
0:cv2.IMREAD_GRAYSCALE
1:cv2.IMREAD_COLOR

png格式保存ushort,16位无符号整型
bmp格式保存uint,8位无符号整型
当需要保存深度图(深度值大于255)时,单通道,使用png格式保存。
读取方式,使用cv2.imread(img, 2),如果使用0读取将会截断超过255部分
返回值: mat=[高、宽、深] = cv2.imread(img)
[高、宽、深] = mat.shape
高=mat.shape[0],宽=mat.shape[1],深=mat.shape[2]

cv2.resize()

import cv2
import numpy as np
img = cv2.imread('dlib_demo/test.jpg')

# INTER_NEAREST  最近邻插值
# INTER_LINEAR  双线性插值(默认设置)
# INTER_AREA  使用像素区域关系进行重采样。
# INTER_CUBIC  4x4像素邻域的双三次插值
# INTER_LANCZOS4  8x8像素邻域的Lanczos插值

print(img.shape)
dst1 = cv2.resize(img, (300, 200))
dst2 = cv2.resize(img, dsize=(int(0.5*img.shape[1]), int(img.shape[0])))  # 改变dsize,dsize是(宽、高)
dst3 = cv2.resize(img, dsize=(0, 0), fx=0.25, fy=0.25)  # 改变dx、dy,宽高变成原1/4
cv2.imshow("dst1", dst1)
cv2.imshow("dst2", dst2)
cv2.imshow("dst3", dst3)
cv2.waitKey(0)

# 下面这个方法没有用
# dst0 = img
# cv2.resize(img, (300, 200), dst=dst0)

默认:INTER_LINEAR,即双线性插值法

BGR转RGB

OpenCV 加载的彩色图像是 BGR 模式,但 Matplotib 是 RGB模式。所以彩色图像如果已经被 OpenCV 读入,那它将不会被 Matplotib 正确显示。

1 方法一

b, g, r = cv2.split(img)
img1 = cv2.merge([r, g, b])

2 方法二

img2 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

cv2.rectangle()、cv2.putText()和cv2.circle()

x1, x2, y1, y2 = 340, 550, 550, 880
  # x1左宽,x2右宽,y1上高,y2下高
w, h = 100, 200
cv2.rectangle(img, (x1, y1), (x2, y2), (255, 0, 0), 2)
  # (255, 0, 0)蓝色bgr, 2框的粗细
cv2.rectangle(img, (x1, y1), (x + w, y + h), (255, 0, 0), 2)
# cv2.putText(img, "true", (x1, y1), cv2.FONT_HERSHEY_COMPLEX, fontScale=2, (0, 255, 0), 2)  # 要是在里面添加了形参名,后面的参数也要添加形参
# 图片,添加的文字,左上角坐标,字体,字体大小,颜色bgr,字体粗细
cv2.putText(img, "Face{}".format(123), (x1, y1), cv2.FONT_HERSHEY_COMPLEX, 2, (0, 255, 0), 2)
cv2.circle(img, (x2, y2), 10, (0, 0, 255), -1)
# 当最后一个元素为-1表示圆圈为实心,当大于0时表示圆圈的粗细。10表示圆圈半径

第二阶段

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值