刚上手MATLAB图像处理的时候,我也被imread、imshow这些函数搞得头晕。读出来的数组维度对不上,显示出来的图像颜色不对,裁剪的时候坐标算错——这些坑我全踩过。折腾了2年多,把最常用的7个函数的用法和容易出错的地方整理出来了,2026年R2025b版本亲测全部可用。
imread()是所有图像操作的起点,用法不难但细节很多。
读灰色图像时,返回的是M×N的二维数组,每个元素对应一个像素的灰度值,范围从0(纯黑)到255(纯白)。读真彩色图像时,返回M×N×3的三维数组,第三个维度分别对应R、G、B三个通道。每个通道占8位,强度等级为28=256,三个通道组合起来一张图能容纳224=1677万种颜色。
2026年的MATLAB还支持直接指定格式读取:
RGB = imread('p1.jpg');
imshow(RGB);
title('原彩色图');
有个容易踩的坑:图片路径里有中文的话,imread()在某些版本会直接读失败。解决办法是把图片放到纯英文路径下,或者用fullfile()拼接路径。
imshow()用来显示图像,最简单的用法就是imshow(A),把数组A直接显示出来。但如果你读的是索引图像(比如GIF格式),就得用imshow(A, map),其中map是[0,1]范围内的c×3矩阵,每行定义一个RGB颜色。
把彩色图转灰度图用rgb2gray(),这个函数会保留亮度信息,丢掉色调和饱和度。实际处理中,一张1920×1080的彩色图转成灰度后,数据量从1920×1080×3≈6.2MB直接降到1920×1080≈2MB,压缩了3倍。对于需要快速处理的场景,这个差距非常明显。
索引图像也能转:
[A,map] = imread('p1.jpg');
newmap = rgb2gray(map);
imshow(A,newmap);
imresize()用来调整图像大小,有两种语法。
第一种是按倍数缩放:
RGB = imread('p1.jpg');
imagesize = imresize(RGB, 2);
imshow(imagesize);
title('尺度变换');
放大2倍后,原来1920×1080的图变成3840×2160,像素数量翻了4倍。
第二种是指定目标尺寸:
imagesize = imresize(RGB, [120 160]);
如果其中一个值设为NaN,MATLAB会自动计算并保持宽高比。这个功能在适配不同显示设备时特别实用,比如把图片统一缩放到120×160做数据集预处理。
imcomplement()做的是图像取反,也就是生成负片。原理很简单:每个像素值x变成255-x。原本白色的地方变黑,黑色变白。一行代码搞定:
imagereverse = imcomplement(RGB);
imshow(imagereverse);
title('色彩翻转');
imadjust()是做图像增强的核心函数,能调整灰度范围和亮度。
基础用法:
RGB1 = imadjust(RGB, [0.2 0.9], [0 1]);
这行代码的意思是:把原图中0.2到0.9之间的灰度值,拉伸到0到1的完整范围。效果类似于Photoshop里的"色阶"调整,暗部细节一下就出来了。
还能控制伽马值来调整亮度:
RGB1 = imadjust(RGB, [0.1 0.5], [0 1], 0.4); % 伽马<1,提亮
RGB2 = imadjust(RGB, [0.1 0.5], [0 1], 4); % 伽马>1,压暗
伽马值0.4会让图像整体变亮,4则让图像变暗。这个参数在处理曝光不足或过度的照片时特别管用。
最后是imcrop(),用来裁剪图像:
RGB1 = imcrop(RGB, [1300 300 1000 1000]);
rect参数是[x y width height],左上角坐标是(0,0)。上面这行代码的意思是:从x=1300、y=300的位置开始,裁出1000×1000的区域。
裁剪前一定要先看清图像尺寸,不然坐标算错就白裁了。我之前就因为没检查尺寸,裁出来全是黑边,白忙活半天。

这7个函数覆盖了MATLAB图像处理80%的日常操作。把代码存下来,需要的时候直接改参数就能用,比每次翻文档快得多。
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。