python图像卷积代码
时间: 2023-05-24 13:05:35 浏览: 263
卷积python代码
5星 · 资源好评率100%
以下是Python中一个实现图像卷积的示例代码:
```python
import numpy as np
import cv2
def convolve(image, kernel):
# 获取图像和卷积核的宽度和高度
(image_height, image_width) = image.shape[:2]
(kernel_height, kernel_width) = kernel.shape[:2]
# 初始化卷积结果矩阵,宽度和高度为原始图像的尺寸
output = np.zeros((image_height, image_width), dtype="float32")
# 遍历图像中每个像素
for y in np.arange(kernel_height // 2, image_height - kernel_height // 2):
for x in np.arange(kernel_width // 2, image_width - kernel_width // 2):
# 根据卷积核对像素进行加权求和
region = image[y - kernel_height // 2:y + kernel_height // 2 + 1,
x - kernel_width // 2:x + kernel_width // 2 + 1]
k = (region * kernel).sum()
# 将结果存储在输出矩阵中
output[y, x] = k
# 将输出矩阵进行归一化(使像素值在0到255之间)
output = normalize(output)
# 将输出矩阵转换为8位整型图像
output = (output * 255).astype("uint8")
# 返回卷积结果
return output
def normalize(image):
# 计算图像数据的最大值和最小值
(minVal, maxVal) = (np.min(image), np.max(image))
# 将图像数据标准化到0到1之间
if maxVal - minVal != 0:
return (image - minVal) / (maxVal - minVal)
else:
return image / maxVal
# 读入待处理图像,将图像灰度化
image = cv2.imread("lena.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 定义卷积核(平滑滤波器)
kernel = np.ones((7, 7), dtype="float32") / (7 * 7)
# 对灰度图像进行卷积操作
output = convolve(gray, kernel)
# 显示原始图像和卷积结果
cv2.imshow("Original", gray)
cv2.imshow("Processed", output)
cv2.waitKey(0)
```
该代码实现了一个简单的图像卷积操作,可以根据需要修改卷积核的大小和权值。
阅读全文