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

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

数字图像处理(三)

  • 一、(准备工作:咋玩,用什么玩具)图像以矩阵形式存储,那矩阵一变、图像立刻跟着变?
    • 1. Python + Jupyter Notebook/Lab + 库 (NumPy, OpenCV, Matplotlib, scikit-image)
    • 2. MATLAB + Image Processing Toolbox
    • 3. JavaScript + HTML5 Canvas + 浏览器
    • 4. 专业的图像处理软件 (带脚本/插件功能)
  • 二、(准备工作:玩具咋买咋装)图像以矩阵形式存储,那矩阵一变、图像立刻跟着变?

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

你好! 从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++。
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];     // Reddata[i + 1] = 255 - data[i + 1]; // Greendata[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
    • 认准一个头像,保你不迷路:
      在这里插入图片描述
http://www.lryc.cn/news/593318.html

相关文章:

  • 我用Cursor,1周上线了一个虚拟资料流量主小程序技术选型
  • 图解系统-小林coding笔记
  • view和pure的区别
  • 电脑windows系统深度维护指南
  • Validation - Spring Boot项目中参数检验的利器
  • 前端开发技巧:浏览器模拟弱网络环境
  • 中间件安全攻防全解:从Tomcat到Weblogic反序列化漏洞介绍
  • 暑假--作业3
  • Redis的持久化-RDB
  • 关于个人博客系统的测试报告
  • 【2025最新】使用neo4j实现GraphRAG所需的向量检索
  • BeanFactory 和 FactoryBean 的区别
  • Netty网络聊天室及扩展序列化算法
  • (后者可以节约内存/GPU显存)Pytorch中求逆torch.inverse和解线性方程组torch.linalg.solve有什么关系
  • 单调队列深度解析(下)
  • 7.19 换根dp | vpp |滑窗
  • 物联网-规则引擎的定义
  • LeetCode中等题--167.两数之和II-输入有序数组
  • RT-Thread的概念和移植
  • Spring AI 项目实战(十八):Spring Boot + AI + Vue3 + OSS + DashScope 实现高效语音识别系统(附完整源码)
  • OpenCV 官翻7 - 对象检测
  • Edge浏览器设置网页自动翻译
  • #Datawhale组队学习#7月-强化学习Task2
  • 医疗AI与融合数据库的整合:挑战、架构与未来展望(上)
  • 高压电工作业证考试核心考点:电气安全基础篇
  • MCP 协议详细分析一 initialize ping tools/list tools/call
  • 初识C++——开启新旅途
  • 简单易懂,两级页表(多级页表)
  • 文生图-StoryGAN:用于故事可视化的顺序条件GAN
  • Python观察者模式详解:从理论到实战