数字图像处理(三)

  • 一、(准备工作:咋玩,用什么玩具)图像以矩阵形式存储,那矩阵一变、图像立刻跟着变?
    • 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.pswp.cn/bicheng/90311.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90311.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/90311.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker-desktop启动失败

报错提示deploying WSL2 distributions ensuring main distro is deployed: checking if main distro is up to date: checking main distro bootstrap version: getting main distro bootstrap version: open \\wsl$\docker-desktop\etc\wsl_bootstrap_version: The network n…

基于FastMCP创建MCP服务器的小白级教程

以下是基于windows 11操作系统环境的开发步骤。 1、python环境搭建 访问官网&#xff1a;https://www.python.org/。下载相应的版本&#xff08;如&#xff1a;3.13.5&#xff09;&#xff0c;然后安装。 安装完成之后&#xff0c;使用命令行工具输入python&#xff0c;显示…

网络协议与层次对应表

网络协议与层次对应表&#xff08;OSI & TCP/IP模型&#xff09;OSI七层模型TCP/IP四层模型协议/技术核心功能与应用​应用层​应用层HTTP/HTTPS网页传输协议&#xff08;HTTP&#xff09;及其加密版&#xff08;HTTPS&#xff09;FTP文件上传/下载协议SMTP/POP3/IMAPSMTP发…

android studio(NewsApiDemo)100%kotlin

api接口地址&#xff1a;https://newsapi.org/docs/get-started 项目成品地址&#xff1a;https://github.com/RushHan824/NewsApiDemo 项目效果展示&#xff1a; MVVM数据流 UML图 本系列文章将带你从零实现一个新闻列表App&#xff0c;适合零基础读者。一步步来&#xff0c…

面试高频题 力扣 417. 太平洋大西洋水流问题 洪水灌溉(FloodFill) 深度优先遍历(dfs) 暴力搜索 C++解题思路 每日一题

目录零、题目描述&#xff1a;用人话再讲一遍一、为什么这道题值得咱们学习&#xff1f;二、思路探索常规思路&#xff1a;逐个检查每个格子&#xff08;会超时&#xff01;⚠️&#xff09;三、正难则反&#xff1a;反向思维的巧妙应用 &#x1f504;&#xff08;思考时间&…

博物馆智慧导览系统AR交互与自动感应技术:从虚实融合到智能讲解的技术实践

本文面向博物馆信息化开发者、智慧场馆系统技术建设师及AR 设计工程师,从AR 交互与自动感应技术的逻辑出发,拆解AR虚实融合技术与智能讲解自动感应技术的原理&#xff0c;为相关开发者实践提供可复用的技术路径。如需获取博物馆智慧导览系统解决方案请前往文章最下方获取&#…

高效编程革命:DeepSeek V3多语言支持与性能优化实战

文章目录 如何利用DeepSeek V3编写高效程序代码:从原理到实践 引言 一、DeepSeek V3核心能力解析 1.1 模型架构与优势 1.2 与传统编程辅助工具对比 二、高效代码编写实践指南 2.1 精准提示工程(Prompt Engineering) 基础提示模板 高级提示技巧 2.2 生产级代码生成案例 示例:…

OkHttp 与 JSON 解析库完美结合:Moshi/Jackson/Gson 实战指南

前言在现代 Android 开发中&#xff0c;网络请求与 JSON 数据处理是密不可分的。OkHttp 作为强大的 HTTP 客户端&#xff0c;与 JSON 解析库&#xff08;Moshi/Jackson/Gson&#xff09;的结合使用&#xff0c;可以极大简化网络请求与数据解析的流程。本文将详细介绍如何将 OkH…

An error occurred at line: 1 in the generated java file问题处理及tomcat指定对应的jdk运行

一、背景 tomcat7启动后&#xff0c;加载jsp页面报错&#xff0c;提示无法将jsp编译为class文件&#xff0c;主要报错信息如下&#xff1a; An error occurred at line: 1 in the generated java file 最后确认该错误原因为&#xff1a;tomcat7不支持jdk1.8版本 机器上已配…

深入剖析大模型在文本生成式 AI 产品架构中的核心地位

一、大模型的崛起与概念解析 在人工智能技术飞速迭代的当下&#xff0c;大模型已成为驱动行业发展的核心引擎。从技术定义来看&#xff0c;大模型&#xff08;Large Model&#xff09; 是指基于深度学习架构、具备海量参数规模&#xff08;通常数十亿至数万亿级别&#xff09;&…

Vue Scoped样式:当动态元素成为“无家可归“的孤儿

引言&#xff1a;一场CSS的"身份危机"想象一下&#xff1a;你精心设计了一个Vue组件&#xff0c;为每个元素添加了漂亮的样式。你满意地添加了scoped属性&#xff0c;确保样式不会"越狱"影响其他组件。然后你动态添加了一些新元素&#xff0c;却发现它们完…

vmware分配了ubuntu空间但是ubuntu没有获取

一开始我看vmware中的ubuntu磁盘空间只有200g不够用&#xff0c;我在vmware给Ubuntu分了300G的磁盘空间&#xff0c;但是ubuntu还是只有之前的200g 如图在ubuntu查看后来发现&#xff0c;在磁盘软件里面需要自己分配磁盘空间大小拓展后就可以了

[MarkdownGithub] 使用块引用高亮显示“注意“和“警告“和其他注意方式的选项

参考来源: https://github.com/orgs/community/discussions/16925 Alerts are an extension of Markdown used to emphasize critical information. On GitHub, they are displayed with distinctive colors and icons to indicate the importance of the content. 提示框是 Ma…

mac测试ollama llamaindex

LlamaIndexs 将大语言模型和外部数据连接在一起的工具。大模型prompt有一个长度限制&#xff0c;当外部知识的内容超过这个长度&#xff0c;无法同时将有效信息传递给大模型&#xff0c;因此就诞生了 LlamaIndex。 具体操作就是通过多轮对话的方式不断提纯外部数据&#xff0c…

数据结构:字符串:大小写转换(changing case of a string)

目录 第一性问题&#xff1a;什么是“大小写”&#xff1f; 逐步构造代码&#xff1a;全部转为大写 我们现在用 第一性原理 的方式&#xff0c;从字符串与字符的本质出发&#xff0c;一步步推导出如何在 C 语言中将字符串中的字母变成全部大写或全部小写。 第一性问题&…

闲庭信步使用图像验证平台加速FPGA的开发:第三十二课——车牌识别的FPGA实现(4)车牌字符的分割定位

&#xff08;本系列只需要modelsim即可完成数字图像的处理&#xff0c;每个工程都搭建了全自动化的仿真环境&#xff0c;只需要双击top_tb.bat文件就可以完成整个的仿真&#xff0c;大大降低了初学者的门槛&#xff01;&#xff01;&#xff01;&#xff01;如需要该系列的工程…

03_java_运行机制

1. java执行流程2. 什么是编译3. 什么是运行

鸿蒙卡片开发保姆级教程

卡片 1. 卡片概念 什么是卡片&#xff1f;卡片用来显示或者提示一些基本信息或者进行一些基本操作。注意不能做重逻辑&#xff0c;所有重要逻辑全部交给应用如果是元服务如何唤醒&#xff1f;因为元服务不提供桌面应用图标&#xff0c;我们可以通过用户手动的方式在桌面上添加一…

反向传播及优化器

反向传播&#xff08;Backpropagation&#xff09;反向传播是计算梯度的算法&#xff0c;核心作用是高效求解 “损失函数对模型所有参数的偏导数”&#xff08;即梯度&#xff09;。没有反向传播&#xff0c;深度学习的大规模训练几乎不可能实现。 整个过程像 “从终点回溯到起…

【机器学习深度学习】生成式模型的评估与验证

目录 前言 1. 主观评估&#xff1a;以人为本的质量判断 1.1 什么是主观评估&#xff1f; 1.2 主观评估的核心流程 1.3 主观评估的优缺点 2. 客观评估&#xff1a;量化的性能衡量 2.1 什么是客观评估&#xff1f; 2.2 常见的客观评估指标 文本生成 图像生成 多模态生…