python 卷积计算,自定义卷积核,并将卷积后的结果保存为图片

版本python3.6
保存图片需要PIL,在 cmd 输入pip install pillow
以下是代码`

import numpy as np
import matplotlib.image as mpimg
from PIL import Image


# 代码功能:
# 对一幅3通道图像的一个尺度的卷积运算


def compute_conv(fm, kernel):
    [h, w] = fm.shape
    k = 3
    r = int(k / 2)
    padding_fm = np.zeros([h + 2, w + 2])  # , np.int)
    rs = np.zeros([h, w])  # , np.int)
    padding_fm[1:h + 1, 1:w + 1] = fm
    for i in range(1, h + 1):
        for j in range(1, w + 1):
            i0 = i - r
            i1 = i + r + 1
            j0 = j - r
            j1 = j + r + 1
            roi = padding_fm[i0:i1, j0:j1]
            rs[i - 1][j - 1] = np.sum(roi * kernel)
    return rs


# 定义卷积核
def kernel_i():
    weights_data = [
            [0, 0, 0],
            [0, 1, 0],
            [0, 0, 0]
    ]
    weights = np.asarray(weights_data)  # , np.int)
    return weights


def main():
    for i in range(c):
        l1 = temp[:, :, i]
        input = np.asarray(l1)  # , np.int)
        weights = kernel_i()  # 获取卷积核
        rs = compute_conv(input, weights)  # 卷积计算
        arr[:, :, i] = rs  # 把卷积后的结果传给新的数组

    # 把卷积后的结果保存为图片
    arr01 = np.array(arr, dtype=np.uint8)
    image = Image.fromarray(arr01, 'RGB')
    image.save('D:/01.jpg')
    # np.savetxt('D:/%d.txt' % (i+1), arr)  # 把每一个维度的矩阵分别保存为一个txt文本


img = mpimg.imread("D:/picture.jpg")
temp = np.asarray(img)   # , np.int)
[h, w, c] = temp.shape
arr = np.zeros((h, w, c), int)
main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值