使用pytorch卷积图像

使用pytorch卷积图像:通常神经网络中的参数是可以学习的,当然我们也可以设置固定的网络参数(如卷积核kernel)来卷积图像,下面是一个示例,示例的步骤:

1. 使用opencv读取图像,并且交换维度和pytorch的数据存储维度NCHW保持一致(opencv是HWC)

2. 使用batch size为2进行卷积,所以输出是两个通道的图像

3. inputs维度为:2x3x512x512(NCHW); 卷积维度:1x3x3x3(CoCiKhKw);outputs维度为:2x1x512x512(NCWH)

import torch.nn as nn
import torch
import cv2
import numpy as np


if __name__ == "__main__":
    img = cv2.imread('/home/wang/lena.jpg')
    img = np.swapaxes(img, 0, 2)
    img = np.swapaxes(img, 1, 2).reshape(3, 512, 512)
    img = img.astype(np.float32) / 255.0
    inputs = torch.from_numpy(np.array([img, img]))
    inputs = inputs.cuda()
    print(inputs.shape)

    conv = nn.Conv2d(3, 1, kernel_size=3, padding=1, groups=1, stride=1, bias=False)
    a = [[1, 1, 1], [1, -8, 1], [1, 1, 1]]
    conv.weight.data = torch.Tensor([a, a, a]).unsqueeze(0).cuda()
    print(conv.weight.shape)

    outputs = conv(inputs)

    outputs = outputs.cpu()
    print(outputs.shape)
    img = outputs.detach().numpy()

    img = np.clip(img, 0, 100)
    img = 255 * ((img - img.min()) / (img.max() - img.min()))
    img1 = img[0, 0, :, :]
    img2 = img[1, 0, :, :]
    cv2.imwrite("/home/wang/xxx.jpg", img1.astype(np.uint8))
    cv2.imwrite("/home/wang/yyy.jpg", img2.astype(np.uint8))
    # cv2.imshow("window", img.astype(np.uint8))

 下图分别是lena.jpg, xxx.jpg 和 yyy.jpg

                

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值