[TOC]

概述

文章参考:https://mp.weixin.qq.com/s/rVLpnDzPpR-TX8qNDWSg_g

代码实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import matplotlib.pyplot as plt
import pylab
import cv2
import numpy as np

# 读取目标图像
img = cv2.imread("/Users/frewen/03.ProgramStudy/20.AI/01.WorkSpace/NyxAILearning/NyxOpenCV/OpenCVPython/image1.jpg")
# 显示读取的图像
plt.imshow(img)
pylab.show()
# 定义卷积核,对图像进行边缘检测。定义一个卷积核,
kernel = np.array([[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]])
# 使用OpenCV内置的卷积函数
res = cv2.filter2D(img, -1, kernel)
# 显示卷积后的图像
plt.imshow(res)
pylab.show()

image-20220220141328952

算法:图像卷积应用是图像与卷积核之间的卷积操作使得新图像具有某种特征,如模糊、锐化、浮雕等。从原理上与一维信号卷积计算过程基本类似:将卷积核视为1个m×n大小的窗口依次在图像上滑动,将图像每个像素点上的灰度值与对应的卷积核上的数值相乘,然后将所有相乘后的值累加作为卷积核中间像素对应像素的灰度值,以此类推,计算所有像素点的卷积值。图像卷积时一般不进行边缘填充,因此,卷积操作可能会导致图像变小(损失图像边缘)。在进行卷积计算之前,卷积核同样需要180°翻转。如图,输入为1个大小7像素×7像素的图像,卷积核大小为3像素×3像素,以计算输入图像中第2行第2个像素点的卷积为例,先将卷积核的中心数值(此处为0),与该像素点对齐,然后将以其为中心的所有9个像素点分别与卷积核中的对应元素相乘,最后累加结果,即为卷积后新图像对应像素点的值。其结果为:(04)+(00)+(00)+(00)+(10)+(10)+(00)+(10)+(2*(-4))=-8。

image-20220220141417121