我们在优化影像时,所采用的方法便是使用特定 kernel,针对整张影像进行卷积操作。
举例来说,模糊(blur)、边缘侦测(edge detection)、边缘强化(edge enhancement)、噪点去除(noise removal)等,都是对影像进行卷积的结果。
当我们用kernel对影像由左上到右下移动,再进行运算,便会得出一幅经过 filtered 的新影像!
上图运算过程: 蓝色 grid 为定义的 3 × 3 kernel,在卷积过程进行中,底下覆盖区域(图中的红色的 grid)与 kernel 进行交乘加总後(下方的 output pixel),将作为输出新图中该 kernel 区域的中心点
;若由左上至右下重复进行上述步骤,轮巡整张图片後就会得到右边的图形。
执行 convolution 後,会发现输出的图片尺寸会比原来的小一圈
→ 为了保持影像完整,会使用我们提过的影像周围补零(Zero padding)
使用cv2.filter2D
import numpy as np
import cv2
import sys
imageName = "123.jpg"
image = cv2.imread(imageName)
if image is None:
print("Could not open or find the image")
sys.exit()
kernel_size = 5 # 设定kernel size为5x5
# 使用numpy建立 5*5且值为1/(5**2)的矩阵作为kernel。
kernel = np.ones((kernel_size, kernel_size), dtype=np.float32) / kernel_size**2
print (kernel) # 显示矩阵内容,所有值皆为0.04的5x5矩阵
#进行convolute,
result = cv2.filter2D(image, dst=-1, kernel=kernel, anchor=(-1, -1), delta=0, borderType=cv2.BORDER_DEFAULT)
cv2.imshow("Filter", result) #显示影像
cv2.imshow("Original", image)
cv2.waitKey(0)
cv2.destroyAllWindows() #关闭影像视窗
<<: Day26 | 很像 Vue 的 AlpineJS(一): x-data
hi~我们今天要讨论有关solidity合约内容,今天的内容会延续昨天的!所以如果还没看昨天的建议...
大家好,我是乌木白,今天要和大家介绍 Mixin 和 RWD 搭配该如何使用? 原本 RWD 写法...
上一篇我们介绍了 interfaces/operations.ts 里定义的 Operation ...
上一篇 Day 22 我们已经了解了何谓 Redux 以及该套件的三大原则,今天就要来为大家介绍在...
本文同步更新於blog 情境:玉皇大帝要举办渡河比赛,动物选手各显神通。 <?php na...