https://github.com/Yijing-Tian/SmallCodeLibrary
图像裁剪、PIL/opencv/io/torch互转
# opencv
img.shape # 高度,宽度,色彩通道数
cutimg = img[y1:y2,x1:x2] # 裁剪
img_size = cv2.resize(img, (int(x / 2), int(y / 2))) # 指定尺寸缩放
img_size = cv2.resize(img, (0, 0), fx=0.25, fy=0.25, interpolation=cv.INTER_NEAREST) # 按比例缩放
# PIL
image.size # 宽度 , 高度
im.crop((x1, y1, x2, y2)) # 裁剪
image_size = image.resize((width, height),Image.ANTIALIAS) # 指定尺寸缩放
# io转opencv opencv转io
cv_img = cv2.cvtColor(image_io_img , cv2.COLOR_RGB2BGR)
image_io_img = cv2.cvtColor(cv_img , cv2.COLOR_BGR2RGB)
# PIL转opencv opencv转PIL
pil_img = Image.fromarray(cv2.cvtColor(cv_img, cv2.COLOR_BGR2RGB))
cv_img = cv2.cvtColor(np.asarray(pil_img), cv2.COLOR_RGB2BGR)
# 使用opencv代替torchvision.utils.save_image
grid = torchvision.utils.make_grid(tensor, normalize=True, range=(-1, 1))
np_img = grid.detach().cpu().mul(255.0).numpy().transpose((1,2,0))
cv_img = cv2.cvtColor(np_img, cv2.COLOR_RGB2BGR)
# torch转opencv
np_img = tensor.detach().cpu().mul(255.0).numpy().squeeze(0).transpose((1,2,0))
cv_img = cv2.cvtColor(np_img, cv2.COLOR_RGB2BGR)
# opencv 转 base64
cv_img = cv2.imencode('.jpg',image_np)[1]
base_img = "data:image/png;base64," + str(base64.b64encode(cv_img), "utf-8")
# base64 转 opencv
base_img = base64.b64decode(base64_code)
cv_img = cv2.imdecode(np.fromstring(base_img, np.uint8), cv2.COLOR_RGB2BGR)
# base64 转 PIL
base_img = base64.b64decode(base64_str)
base_img = BytesIO(base_img)
pil_img = Image.open(base_img)
# PIL 转 base64
img_buffer = BytesIO()
pil_img.save(img_buffer, format='JPEG')
base_img = base64.b64encode(img_buffer.getvalue()).decode()
读取路径下所有文件,并按win排序方法进行排序
from natsort import ns, natsorted
import os
pathB = 'work/'
imgB_list = os.listdir(pathB)
imgB_list = natsorted(imgB_list,alg=ns.PATH) #对读取的路径进行排序
for imgB in imgB_list:
print(pathB+imgB)
PIL、opencv读取网络图片
from urllib.request import urlopen
import io
from PIL import Image
touxiang = 'https://y.jpg'
image_bytes = urlopen(touxiang).read()
data_stream = io.BytesIO(image_bytes)
touxiang = Image.open(data_stream).convert("RGB")
import requests
file = requests.get("https://www.baidu.com/1.png")
img = cv2.imdecode(np.fromstring(file.content, np.uint8), 1)
opencv PIL 贴图
pil_bg = Image.new(mode="RGBA", size=(width,height),color=(255,255,255)) #创建背景
small = Image.open(path).convert("RGBA") # 小图像
pil_bg.paste(small,(startLeft,startTop,startLeft+small.size[0],startTop+small.size[1]),mask=small.split()[3])