这个是我常用的代码,保存下来,以供以后使用方便。有些代码可能是直接从其他地方copy过来的,但是在文中不进行标注引用。特此声明。
数据
NUMPY与TENSOR的转化
tensor -> numpy
np.array(data.cpu())或np.array(data.cpu().detch())
numpy-> tensor
torch.from_numpy(data)
tensor用size
numpy用shape
数据类型转化
得到数据类型
data.dtype()
数据类型转化
numpy:
mask=mask.astype(np.uint8)
一般是为了保存为图片,所以是8位
将在CUDA上的TORCH数据保存为图片
?import cv2
?mask3=src_bg_mask.squeeze(0).squeeze(0)
?mask3=np.array(mask3.cpu()) ? ? #转化到cpu,并转化为numpy
?mask3=mask3.astype(np.uint8)*255 # 将dtype 转化为uint8,自己看要不要×255
?# cv2.imshow('mask3',mask3)
?#cv2.waitkey(0)
?cv2.imwrite('mask3.png',mask3)
??
?如果要保存的图片是三维的,就要在tensor的时候转化为(H,W,3)
? ? ? ? src_img=src_img.permute(1,2,0)
显卡
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
文件读取
读取一个文件下的所有JPG图片
?import glob
?img_path_list=sorted(glob.glob(path+'/*.jpg'))
?# 其中的 jpg 可以改成其他类型
获取一个路径的前一个路径
?path='./outputs/results/demos/imitators/mixamo_preds/pred_00000100.jpg'
?b=path.split('/')
?path2='/'.join(i for i in b[:-1])
?# path2=''./outputs/results/demos/imitators/mixamo_preds'
得到原字符串右对齐,使用字符填充的固定长度字符串
?a=1
?a.rjust(4,'0')
?a='0001'
文件转化
将AVI MP4转化为GIF
-
首先 pip install moviepy -
?import moviepy.editor as mpy
??
?# 视频文件的本地路径
?def mp4_to_gif(path):
? ? ?content = mpy.VideoFileClip("D:/photo_video/qq/1.avi")
? ? ?#(avi->mp4)
? ? ?# 剪辑0分0秒到0分4秒的片段。resize为修改清晰度
? ? ?c1 = content.subclip()
? ? ?# c1 = content.subclip((0, 0), (0, 4)).resize((480, 320))
? ? ?# 将片段保存为gif图到python的默认路径
? ? ?c1.write_gif("D:/photo_video/qq/gav24.gif") 我自己试过avi以及MP4都可以,其他的类型没有试过,你们可以自己have a try. 将AVI GIF转为JPG,PNG ?import cv2
?from PIL import Image
??
?video_path = 'D:/photo_video/qq/0.gif' ?# 视频或gif图像的路径
?save_path = 'D:/photo_video/qq/' ?# 保存帧的路径
?a=video_path.split('/')
?name=a[-1][-3:]
??
?# 当打开一个序列文件时,PIL库自动加载第一帧。
?# 可以使用seek()函数和tell()函数在不同帧之间移动。实现保存
?if name == "avi":
? ? ?cap = cv2.VideoCapture(video_path)
? ? ?fps = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
? ? ?fps_count = 0
? ? ?for i in range(fps):
? ? ? ? ?ret, frame = cap.read()
? ? ? ? ?if ret:
? ? ? ? ? ? ?cv2.imwrite(save_path + str(10000 + fps_count) + '.jpg', frame)
? ? ? ? ? ? ?#(jpg->png)
? ? ? ? ? ? ?fps_count += 1
?if name == "gif":
? ? ?im = Image.open(video_path)
? ? ?# 当打开一个序列文件时,PIL库自动加载第一帧。
? ? ?# 可以使用seek()函数和tell()函数在不同帧之间移动。实现保存
? ? ?try:
? ? ? ? ?while True:
? ? ? ? ? ? ?current = im.tell()
? ? ? ? ? ? ?# 为了保存为jpg格式,需要转化。否则可以保存为png
? ? ? ? ? ? ?img = im.convert('RGB')
? ? ? ? ? ? ?img.save(save_path + '/' + str(10000 + current) + '.jpg')
? ? ? ? ? ? ? ? ? ? ? ? ?#(jpg->png)
? ? ? ? ? ? ?im.seek(current + 1)
? ? ?except EOFError:
? ? ? ? ?pass
PYTHON将.PNG图片改为.JPG格式
?import os
?import re
??
?path="F:/xxx"
?file_walk = os.walk(path)
?fileNum = 0
?filesPathList = []
?for root, dirs, files in file_walk:
? ? ?# print(root, end=',')
? ? ?# print(dirs, end=',')
? ? ?# print(files)
? ? ?for file in files:
? ? ? ? ?fileNum = fileNum + 1
? ? ? ? ?filePath = root + '/' + file
? ? ? ? ?# print(filePath)
? ? ? ? ?filesPathList.append(filePath)
? ? ? ? ?protion = os.path.splitext(filePath)
? ? ? ? ?# print(protion[0],protion[1])
??
? ? ? ? ?if protion[1].lower() == '.png':
? ? ? ? ? ? ?print("正在处理:" + filePath)
? ? ? ? ? ? ?newFilePath = protion[0] + '.JPG'
? ? ? ? ? ? ?os.rename(filePath, newFilePath)
多张图片合成为GIF
-
pip install imageio -
?import imageio
?import os
??
?def create_gif(img_dir, image_list, gif_name, duration=0.05):
? ? ?frames = []
? ? ?for image_name in image_list:
? ? ? ? ?print("image_name={0} img_dir={1}".format(image_name, img_dir))
? ? ? ? ?frames.append(imageio.imread(img_dir + '/'+ image_name))
? ? ?imageio.mimsave(gif_name, frames, 'GIF', duration=duration)
? ? ?return
??
?def main():
? ? ?img_dir = './image_dir'
? ? ?duration = 0.05 # 每秒20帧
? ? ?image_list = os.listdir(img_dir + '/')
? ? ?gif_name = img_dir+'.gif'
? ? ?create_gif(img_dir, image_list, gif_name, duration)
??
?if __name__ == '__main__':
? ? ?main()
腐蚀,画框并裁剪
Net是一个抠图的网络,得到一个二值化的mask蒙版(只有黑白)
?mask = Net("0000.jpg")
?mask = mask.astype(np.uint8) * 255
? ? ?# mask=0,255
?print(mask.shape)
?img = mask.copy()
?mask = mask[:, :, 0]
? ? ?# mask两个维度
?cnts = (cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE))[0]
??
?c = sorted(cnts, key=cv2.contourArea, reverse=True)[0] ?# contourArea这计算图像轮廓的面积 从大到小排,取最大
??
?rect = cv2.boundingRect(c) ?# minAreaRect就是求出在上述点集下的最小面积矩形
??
?x = rect[0]-10
?y = rect[1]-10
?wight = rect[2]
?height = rect[3]
?if height >= wight:
? ? ?x = x - (height - wight) / 2
? ? ?if x<0:
? ? ? ? ?x=0
? ? ?wight = height
??
?else:
? ? ?y = y - (wight-height) / 2
? ? ?if y<0:
? ? ? ? ?y=0
? ? ?height = wight
??
?box = [[x, y], [x + height, y], [x + wight, y + height], [x, y + height]]
?box = np.int64(box)
??
?a=cv2.imread('0000.jpg')
?final = cv2.drawContours(a, [box], -1, (0, 255, 0), 3)
?cv2.imshow("Image", final)
??
?print(a.shape)
?c=a[int(y):int(y+height),int(x):int(x+wight),:]
?print(c.shape)
?cv2.imshow("final",c)
?cv2.waitKey(0)
?# final=cv2.resize(255,255)
??
?print('---------------Finish-------------------')
?
?
|