数字图像处理(三:图像如果当作矩阵,那加减乘除处理了矩阵,那图像咋变):从LED冬奥会、奥运会及春晚等等大屏,到手机小屏,快来挖一挖里面都有什么

数字图像处理(三)

一、(准备工作:咋玩,用什么玩具)图像以矩阵形式存储,那矩阵一变、图像立刻跟着变?

你好! 从LED冬奥会、奥运会及春晚等等大屏,到手机小屏,快来挖一挖里面都有什么。

为了不拘束各位看官,把各种玩法给大家列出来

1. Python + Jupyter Notebook/Lab + 库 (NumPy, OpenCV, Matplotlib, scikit-image)

  • 完全控制矩阵: 你直接操作的就是图像对应的NumPy数组 (np.array)。每个像素值(R, G, B 或灰度)就是一个矩阵元素。
  • 实时可视化: 在Jupyter Notebook中,一行代码修改矩阵,下一行代码就能用matplotlib.imshow()或cv2.imshow()显示结果图像,变化立竿见影。
  • 强大的库: OpenCV (cv2) 和 scikit-image (skimage) 提供了几乎所有你能想到的图像处理操作(本质都是矩阵运算),并且你能看到它们内部是如何操作矩阵的(或者你自己用NumPy实现)。
  • 交互性 (可选): 结合ipywidgets库,可以创建滑块、按钮等交互控件,动态调整矩阵参数(比如卷积核系数、阈值、亮度增益),图像实时更新,效果极其直观。
    • 你可以实现翻转(np.flip)、旋转(np.rot90)、裁剪(切片[:, :])、颜色空间转换(cv2.cvtColor)、卷积滤波(cv2.filter2D 或手动实现)、阈值分割(np.where)等等。每一步操作后显示图像,变化过程清晰可见。

比如

复制代码
import cv2
import numpy as np
from matplotlib import pyplot as plt

# 1. 读取图像为NumPy矩阵 (BGR格式)
image = cv2.imread('your_image.jpg') # 矩阵 shape: (height, width, 3)

# 2. 显示原始图像
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) # OpenCV是BGR, matplotlib用RGB
plt.title('Original Image (Matrix)')

# 3. 直接操作矩阵!例如,将红色通道(R)置零
modified_image = image.copy() # 避免修改原图
modified_image[:, :, 2] = 0 # 第3个维度索引2是OpenCV BGR中的R通道

# 4. 显示修改后的图像
plt.subplot(1, 2, 2)
plt.imshow(cv2.cvtColor(modified_image, cv2.COLOR_BGR2RGB))
plt.title('Matrix Changed (Red Channel Zeroed)')
plt.show()

2. MATLAB + Image Processing Toolbox

  • 优点: 如果你在学校或研究所有MATLAB可用,这也是一个非常好的选择。

    • 矩阵是核心: MATLAB本身就是为矩阵运算设计的语言。图像直接表示为矩阵(或高维数组)。
    • 强大的工具箱: Image Processing Toolbox 提供了极其丰富的图像处理函数和优秀的可视化工具 (imshow, imtool)。
    • 交互式工具: 像 imtool 允许你查看像素值、测量距离、调整窗宽窗位等,直接关联底层矩阵。
    • 丰富的文档和示例: 学习资源多。
  • 缺点:

    • 商业软件,需要许可证。
    • 不如Python生态开放和通用。

3. JavaScript + HTML5 Canvas + 浏览器

  • 优点: 如果你想创建一个网页应用或交互式演示来展示图像处理效果,这是最佳选择。库如p5.js可以简化Canvas操作。
    • 高度交互性和可视化: 非常适合构建在线的、交互式的图像处理演示。用户可以在网页上直接操作,效果实时反馈。
    • Canvas API: 可以通过ImageData对象直接访问和操作像素数据(就是一个巨大的Uint8ClampedArray,本质是RGBA一维数组,需要转换处理)。
  • 缺点:
    • 直接操作像素数组相对于NumPy操作多维矩阵来说,有时会更底层、更繁琐一些(需要自己处理索引计算)。
    • 对于复杂的数学运算和大型矩阵操作,性能可能不如Python或C++。
C# 复制代码
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
const img = new Image();
img.onload = function() {
  // 绘制原图
  ctx.drawImage(img, 0, 0);
  // 获取图像矩阵数据 (RGBA)
  const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
  const data = imageData.data; // Uint8ClampedArray [R, G, B, A, R, G, B, A, ...]

  // 操作矩阵/像素数据:例如,反转颜色
  for (let i = 0; i < data.length; i += 4) {
    data[i] = 255 - data[i];     // Red
    data[i + 1] = 255 - data[i + 1]; // Green
    data[i + 2] = 255 - data[i + 2]; // Blue
    // Alpha (data[i+3]) 保持不变
  }

  // 将修改后的矩阵数据放回Canvas,图像立刻变化!
  ctx.putImageData(imageData, 0, 0);
};
img.src = 'your_image.jpg';

4. 专业的图像处理软件 (带脚本/插件功能)

  • 例如: GIMP (支持Python-Fu, Script-Fu), ImageJ/Fiji (Java宏, 脚本), Adobe Photoshop (JS脚本, 动作)
  • 优点
    • 提供直观的GUI界面进行常规操作。
    • 脚本/宏允许你编写代码自动化操作(本质上也是在操作像素矩阵)。
  • 缺点
    • 直接访问和可视化底层矩阵不如Python/NumPy或MATLAB方便和透明。
    • 脚本语言可能不如通用编程语言灵活。

二、(准备工作:玩具咋买咋装)图像以矩阵形式存储,那矩阵一变、图像立刻跟着变?

我是个懒蛋,懒得翻,所以就第一种了

  • 安装Anaconda(包含Python和Jupyter Notebook等科学计算库):https://www.anaconda.com/products/individual

  • 安装OpenCV和Matplotlib(如果Anaconda没有自带):

    复制代码
    在Anaconda Prompt中运行
    pip install opencv-python matplotlib scikit-image
    or
    pip install opencv-python matplotlib numpy scikit-image ipywidgets pillow

下次开始玩玩具吧,这次先撂了

如果想了解一些成像系统、图像、人眼、颜色等等的小知识,快去看看视频吧 :

  • GodWarrior、抖音号:59412983611
  • B站:宇宙第一AIYWM
    • 认准一个头像,保你不迷路:
相关推荐
WoShop商城源码17 分钟前
短视频矩阵系统:从源头到开发的全面解析
大数据·人工智能·其他·矩阵
WoShop商城源码6 小时前
短视频矩阵系统:选择与开发的全方位指南
大数据·人工智能·其他·矩阵
Blossom.1188 小时前
基于深度学习的语音识别:从音频信号到文本转录
人工智能·深度学习·线性代数·机器学习·计算机视觉·音视频·语音识别
椎名ひる13 小时前
74、搜索二维矩阵
算法·leetcode·矩阵
shady197218 小时前
用线性代数推导码分多址(CDMA)
计算机网络·线性代数
math5901271 天前
持续同调文章阅读(四)
矩阵·数据分析·拓扑学
modem协议笔记1 天前
2G和3G网络关闭/退网状态(截止2025年7月)
5g·智能手机
WoShop商城源码1 天前
短视频矩阵系统的崛起与未来发展
线性代数·其他·矩阵
咕噜签名分发冰淇淋1 天前
苹果ios系统IPA包企业签名手机下载应用可以有几种方式可以下载到手机?
ios·智能手机