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

MATLAB 图像处理基础:读取、显示与保存图像

掌握图像处理的第一步是学会如何与图像文件进行交互:读取图像到 MATLAB 工作空间,显示图像以观察处理效果,以及保存图像以保留处理结果。本节将结合代码示例,详细讲解这些基础操作,并分析常见问题与解决思路。

目录

1. 图像读取:imread 函数

2. 图像显示:imshow 与 figure

2.1 基础显示:imshow

2.2 多图显示与窗口管理

3. 图像保存:imwrite 函数

4. 常见问题与解决思路

4.1 路径错误

4.2 图像显示异常

4.3 保存后图像失真

1. 图像读取:imread 函数

imread 函数是 MATLAB 中读取图像的核心工具,支持多种格式(如 JPEG、PNG、BMP、TIFF 等)。其基本语法为:

img = imread('filename.format'); 

关键点:

  • 路径问题:若图像不在当前工作目录,需提供完整路径(例如 'C:\images\cat.jpg')。
  • 数据类型:读取后的图像通常为 uint8 类型(0-255),彩色图像存储为三维矩阵 [行, 列, 通道],灰度图为二维矩阵。
  • 透明度通道:PNG 图像可能包含透明度通道(Alpha 通道),读取后为四维矩阵 [行, 列, RGB, Alpha]
% 读取当前目录下的 JPEG 图像
img_color = imread('flower.jpg');  

% 读取指定路径的 PNG 图像(含透明度)
img_png = imread('D:\data\transparent_logo.png'); 

% 查看图像尺寸和通道数
disp(['图像尺寸:', num2str(size(img_color))]);

2. 图像显示:imshow 与 figure

2.1 基础显示:imshow

imshow 函数用于在图形窗口显示图像,自动调整坐标轴并优化显示效果:

imshow(img); 

参数扩展:

  • 显示范围调整imshow(img, [low high]) 手动设置灰度范围(常用于显示 double 类型图像)。
  • 调整显示大小imshow(img, 'InitialMagnification', 100) 控制缩放比例(100% 原尺寸)。
2.2 多图显示与窗口管理
  • 创建新窗口figure 创建独立窗口,避免图像覆盖。
  • 多图排列subplot(m,n,p) 将多个图像显示在同一窗口。

示例代码:

% 显示彩色图像
figure;  
imshow(img_color);  
title('Original Color Image');

% 并排显示原图与灰度图
gray_img = rgb2gray(img_color);
figure;
subplot(1,2,1); imshow(img_color); title('Color');
subplot(1,2,2); imshow(gray_img);  title('Grayscale');

3. 图像保存:imwrite 函数

imwrite 函数用于将处理后的图像保存到文件,语法为:

imwrite(img, 'filename.format', 'ParamName', ParamValue, ...);

关键参数:

  • 格式选择:文件格式由扩展名决定(如 .jpg.png.bmp)。
  • JPEG 质量'Quality' 参数(0-100,默认 75),控制压缩率与失真。
  • PNG 透明度:若图像包含 Alpha 通道,需指定 'Alpha' 参数。
  • 数据类型匹配:保存前需确保数据范围正确(例如 uint8 图像值在 0-255)。

示例代码:

% 保存 JPEG 图像
imwrite(img_color, 'high_quality.jpg');  

% 保存 JPEG 图像(压缩质量为 90)
imwrite(img_color, 'high_quality.jpg', 'Quality', 90);  

% 保存 PNG 图像(带透明度)
imwrite(img_png(:,:,1:3), 'logo_no_bg.png', 'Alpha', img_png(:,:,4));  

% 保存灰度图像(注意数据类型转换)
gray_img_double = im2double(gray_img); % 转换为 double 类型(0-1)
imwrite(gray_img_double, 'gray_double.tif'); 

4. 常见问题与解决思路

4.1 路径错误
  • 错误提示"File not found" 或 "Invalid filename"
  • 解决方法
    • 使用 cd 命令切换工作目录:cd('D:\images\')
    • 使用绝对路径:imread('D:\images\cat.jpg')
    • 通过 uigetfile 函数交互式选择文件
[filename, pathname] = uigetfile({'*.jpg;*.png','Image Files'});
img = imread(fullfile(pathname, filename));
4.2 图像显示异常
  • 全白/全黑:可能因数据类型错误(例如 double 类型图像未归一化到 0-1)。
    • 修复代码:imshow(im2double(img)) 或 imshow(img, [])(自动缩放)。
  • 颜色失真:通道顺序错误(如 BGR 与 RGB 混淆)。
    • 修复代码:调整通道顺序:img_rgb = img(:,:,[3 2 1]);
4.3 保存后图像失真
  • JPEG 压缩失真:提高 'Quality' 参数或换用无损格式(如 PNG)。
  • 颜色异常:保存时未正确保留色彩空间,需检查通道顺序和数据类型。

http://www.kler.cn/a/547793.html

相关文章:

  • 【异或数列——博弈论】
  • 【BUUCTF】[网鼎杯 2018]Comment
  • Maven打包保留参数名称
  • 家里WiFi信号穿墙后信号太差怎么处理?
  • vue框架生命周期详细解析
  • Java+机器学习基础:打造AI学习基础Demo
  • 12苍穹外卖之工作台(Apache POI、Excel)
  • SQLServer联合winform 制作一个简单注册登录系统
  • 随手记:小程序setData 数据传输长度为 XXXKB,存在有性能问题!小程序长列表性能优化,uni.createIntersectionObserver
  • 国产编辑器EverEdit - 上下翻滚不迷路(历史编辑位置、历史光标位置回溯功能)
  • 【开源免费】基于SpringBoot+Vue.JS医药管理系统(JAVA毕业设计)
  • 【Java学习】类和对象
  • 【第9章:计算机视觉实战—9.4 计算机视觉在其他领域的应用探索】
  • Linux系统编程之基本信号处理
  • linux--关于makefile
  • 如何使用UniApp实现页面跳转和数据传递?
  • iOS实现生物识别
  • 【k8s应用管理】kubernetes 安全机制
  • 【prompt实战】旅行攻略顾问
  • PHP 基础介绍