当前位置: 首页 > news >正文

图像卷积初识

目录

一、卷积的概念

1、常见卷积核示例

二、使用 OpenCV 实现卷积操作

1、代码说明

2、运行说明


 

一、卷积的概念

在图像处理中,卷积是一种通过滑动窗口(卷积核)对图像进行局部计算的操作。卷积核是一个小的矩阵,它在图像上逐行逐列滑动,将每个位置的像素值与卷积核对应位置的值相乘后求和,得到新的像素值。这个过程可以实现多种效果,如模糊、锐化、边缘检测等。

卷积的核心思想是:用卷积核提取图像中的特定特征。不同的卷积核设计会产生不同的效果。

1、常见卷积核示例

以下是几种常见的卷积核及其作用:

1.均值模糊核(3×3):

[1/9, 1/9, 1/9]

[1/9, 1/9, 1/9]

[1/9, 1/9, 1/9]

作用:平滑图像,减少噪声。

2.锐化核: 

[ 0, -1, 0]

[-1, 5, -1]

[ 0, -1, 0]

作用:增强图像边缘,使图像更清晰。

3.水平边缘检测核(Sobel 算子): 

[-1, 0, 1]

[-2, 0, 2]

[-1, 0, 1]

作用:检测图像中的水平边缘。

二、使用 OpenCV 实现卷积操作

在 Python 中,使用 OpenCV 的cv2.filter2D()函数可以轻松实现卷积操作。以下是一个完整的示例代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像
image = cv2.imread('example.jpg')  # 请替换为实际图像路径
if image is None:print("无法读取图像,请检查路径是否正确")
else:# 转换为RGB格式(matplotlib使用RGB,而OpenCV使用BGR)image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 定义卷积核kernels = {'原始图像': None,'均值模糊': np.ones((5, 5), np.float32) / 25,'锐化': np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]]),'水平边缘检测': np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]]),'垂直边缘检测': np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]])}# 创建子图以显示结果fig, axes = plt.subplots(2, 3, figsize=(15, 10))axes = axes.flatten()# 对每个卷积核应用卷积并显示结果for i, (name, kernel) in enumerate(kernels.items()):if kernel is None:result = imageelse:# 应用卷积result = cv2.filter2D(image, -1, kernel)# 显示结果axes[i].imshow(result)axes[i].set_title(name)axes[i].axis('off')plt.tight_layout()plt.show()    

 

1、代码说明

上述代码实现了以下功能:

  1. 图像读取:使用cv2.imread()读取图像,并进行错误处理。
  2. 卷积核定义:定义了 5 种不同的卷积核,包括原始图像、均值模糊、锐化、水平边缘检测和垂直边缘检测。
  3. 卷积操作:使用cv2.filter2D()函数应用卷积核,第二个参数-1表示输出图像与输入图像具有相同的深度。
  4. 结果可视化:使用 matplotlib 将原始图像和卷积结果并排显示,便于对比。

2、运行说明

  1. 请确保已安装 OpenCV 和 matplotlib 库:

pip install opencv-python matplotlib numpy

 2.将代码中的"example.jpg"替换为你自己的图像路径。

3.运行代码后,将显示原始图像和应用不同卷积核后的效果对比图。

通过调整卷积核的数值,你可以实现更多自定义的图像处理效果。

 

 

相关文章:

  • 操作系统实验习题解析 上篇
  • 中国古代史1
  • 关于ffmpeg的简介和使用总结
  • django的权限角色管理(RBAC)
  • 单片机-STM32部分:10-1、485
  • TIME - MoE 模型代码 3.4——Time-MoE-main/time_moe/models/modeling_time_moe.py
  • 【并发编程】基于 Redis 手写分布式锁
  • 鸿蒙系统使用ArkTS开发语言支持身份证阅读器、社保卡读卡器等调用二次开发SDK
  • VBA将PDF文档内容逐行写入Excel
  • OpenLayers根据任意数量控制点绘制贝塞尔曲线
  • Lua—元表(Metatable)
  • c++——二叉树进阶
  • vue 中的ref
  • 多线程 2 - 死锁问题
  • c#建筑行业财务流水账系统软件可上传记账凭证财务管理系统签核功能
  • MindSpore框架学习项目-ResNet药物分类-模型优化
  • CSS渲染性能优化
  • STM32实现九轴IMU的卡尔曼滤波
  • 阿里云购买ECS 安装redis mysql nginx jdk 部署jar 部署web
  • STM32-ADC模数转换器(7)
  • 为何发胖?如何减肥?一个医学体重管理中心的探索启示
  • 巴基斯坦外长:近期军事回应是自卫措施
  • 伤员回归新援融入,海港逆转海牛重回争冠集团
  • 上海“世行对标改革”的税务样本:设立全国首个税务审判庭、制定首个税务行政复议简易程序
  • 上海乐高乐园度假区将于7月5日开园
  • 苹果用户,安卓来“偷心”