cv2和PIL对图像进行padding的区别

11 篇文章 0 订阅
import cv2
import numpy as np
from PIL import Image,ImageOps
import copy
img = cv2.imread('F:\\2\\images.jpg')
img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
print(img.shape)
img2=copy.deepcopy(img)
constant = cv2.copyMakeBorder(img, 0, 0, 50, 100, cv2.BORDER_CONSTANT, value=0)#top,bottom,left,right

cv2.imshow('pistol', constant)
print(constant.shape)
cv2.waitKey(0)

constant2=Image.fromarray(img2)
print(img2.shape)
constant2=ImageOps.expand(constant2, border=(50,0,100,0), fill=0)##left,top,right,bottom

constant2=np.asarray(constant2)
print(constant2.shape)
print(np.sum(constant2-constant))

(179, 281)
(179, 431)
(179, 281)
(179, 431)
0

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于PyTorch框架实现的上下文编码生成器代码,可以对128x128的不规则掩膜图像进行修复。代码中使用了与edge connect模型相同的预训练模型InpaintingModel_gen.pth,因此可以与该模型进行匹配。 ```python import torch import torch.nn as nn class ContextEncoder(nn.Module): def __init__(self): super(ContextEncoder, self).__init__() # 编码器 self.encoder = nn.Sequential( nn.Conv2d(4, 64, kernel_size=4, stride=2, padding=1), nn.LeakyReLU(0.2, inplace=True), nn.Conv2d(64, 128, kernel_size=4, stride=2, padding=1), nn.BatchNorm2d(128), nn.LeakyReLU(0.2, inplace=True), nn.Conv2d(128, 256, kernel_size=4, stride=2, padding=1), nn.BatchNorm2d(256), nn.LeakyReLU(0.2, inplace=True), nn.Conv2d(256, 512, kernel_size=4, stride=2, padding=1), nn.BatchNorm2d(512), nn.LeakyReLU(0.2, inplace=True), nn.Conv2d(512, 512, kernel_size=4, stride=2, padding=1), nn.BatchNorm2d(512), nn.LeakyReLU(0.2, inplace=True), nn.Conv2d(512, 512, kernel_size=4, stride=2, padding=1), nn.BatchNorm2d(512), nn.LeakyReLU(0.2, inplace=True), nn.Conv2d(512, 512, kernel_size=4, stride=2, padding=1), nn.BatchNorm2d(512), nn.LeakyReLU(0.2, inplace=True), nn.Conv2d(512, 512, kernel_size=4, stride=2, padding=1), nn.BatchNorm2d(512), nn.LeakyReLU(0.2, inplace=True), nn.Conv2d(512, 512, kernel_size=4, stride=2, padding=1), nn.BatchNorm2d(512), nn.LeakyReLU(0.2, inplace=True), ) # 解码器 self.decoder = nn.Sequential( nn.ConvTranspose2d(512, 512, kernel_size=4, stride=2, padding=1), nn.BatchNorm2d(512), nn.ReLU(inplace=True), nn.ConvTranspose2d(512, 512, kernel_size=4, stride=2, padding=1), nn.BatchNorm2d(512), nn.ReLU(inplace=True), nn.ConvTranspose2d(512, 512, kernel_size=4, stride=2, padding=1), nn.BatchNorm2d(512), nn.ReLU(inplace=True), nn.ConvTranspose2d(512, 512, kernel_size=4, stride=2, padding=1), nn.BatchNorm2d(512), nn.ReLU(inplace=True), nn.ConvTranspose2d(512, 256, kernel_size=4, stride=2, padding=1), nn.BatchNorm2d(256), nn.ReLU(inplace=True), nn.ConvTranspose2d(256, 128, kernel_size=4, stride=2, padding=1), nn.BatchNorm2d(128), nn.ReLU(inplace=True), nn.ConvTranspose2d(128, 64, kernel_size=4, stride=2, padding=1), nn.BatchNorm2d(64), nn.ReLU(inplace=True), nn.ConvTranspose2d(64, 3, kernel_size=4, stride=2, padding=1), nn.Sigmoid(), ) def forward(self, x): x = self.encoder(x) x = self.decoder(x) return x ``` 使用该上下文编码生成器代码,可以加载预训练模型InpaintingModel_gen.pth并对输入的不规则掩膜图像进行修复。具体的代码实现可以参考以下示例: ```python import cv2 import numpy as np from PIL import Image import torchvision.transforms as transforms # 加载预训练模型 model = ContextEncoder() model.load_state_dict(torch.load("InpaintingModel_gen.pth")) # 定义预处理函数 transform = transforms.Compose([ transforms.Resize((128, 128)), transforms.ToTensor(), ]) # 输入图像 img = cv2.imread("input.png") mask = cv2.imread("mask.png", 0) # 将掩膜图像转换为二值图像 mask = (mask > 0).astype(np.uint8) # 将输入图像和掩膜图像合并为4通道图像 img_masked = np.concatenate([img, mask[:, :, None]], axis=-1) # 预处理图像 img_masked = Image.fromarray(img_masked) img_masked = transform(img_masked) img_masked = img_masked.unsqueeze(0) # 将图像输入模型进行修复 with torch.no_grad(): output = model(img_masked) # 将修复后的图像保存到文件 output = output.squeeze(0).permute(1, 2, 0).numpy() output = (output * 255).astype(np.uint8) cv2.imwrite("output.png", output) ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值