python-opencv图像处理(2):卷积操作

 卷积:

什么是二维卷积呢?看下面一张图就一目了然:

卷积就是循环对图像跟一个核逐个元素相乘再求和得到另外一副图像的操作,比如结果图中第一个元素5是怎么算的呢?原图中3×3的区域与3×3的核逐个元素相乘再相加:1×1 + 2×0 + 1×0 + 0×0 + 1×0 + 1×0 + 3×0 + 0×0 + 2×2 = 5。算完之后,整个框再往右移一步继续计算,横向计算完后,再往下移一步继续计算……

代码实现:

import cv2
import numpy as np

img = cv2.imread('1-test.jpg',cv2.IMREAD_GRAYSCALE) #提取图像灰度值
(height,width) = img.shape #提取长宽
img_new = np.zeros([img.shape[0]-2,img.shape[1]-2]) #创建一个新图像存储卷积图像(新图像的长和宽分别比原图像小2,因为第一行和第一列,最后一行和最后一列无法被卷积)

#xximg = np.ones([400, 400, 1], np.uint8)

print(img_new,np.shape(img),np.shape(img_new)) #查看图像信息
laplacien = np.array(([-1,-1,-1],[-1,8,-1],[-1,-1,-1]))#拉普拉斯卷积核

#
for y in range(1,height-2):
    for x in range(1,width-2):
        dataV = (8*img[y, x]-img[y-1, x-1]-img[y-1, x]-img[y-1, x+1]-img[y, x-1]-img[y, x+1]-img[y+1, x-1]-img[y+1, x]-img[y+1, x+1])

        if(dataV<0):
            img_new[y-1, x-1] = 0
        else:
            img_new[y-1, x-1] = dataV


cv2.imwrite('1-test-laplacien.jpg', img_new)

img_new = img_new.astype(np.uint8)

cv2.namedWindow('img_new')
cv2.imshow('img_new',img_new)
cv2.waitKey()

cv2.destroyAllWindows()

结果:

(a)原图

(b)灰度图

(c)结果图

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JoannaJuanCV

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值