将`flipud`函数应用于在MATLAB中从`frame2im`获得的图像

Kan*_*uly 3 matlab image-processing matlab-figure

我有一个基本的图形plot(),我使用getframe(gcf)和转换为图像frame2im.

plot(boundary(:,2),boundary(:,1),'r','LineWidth',2);
F = getframe(gcf); 
[X, Map] = frame2im(F);
Run Code Online (Sandbox Code Playgroud)

imshow(X,Map)工作得很好,但是当我尝试申请其他与图像相关的功能,如flipudrot90XMATLAB说,图像必须是一个二维矩阵.

我怎么能这样做?

ray*_*ica 7

原因是因为你有一个多通道图像.它适用于"某些"图像,因为它们很可能是灰度图像,并且只是2D矩阵.如果您有3D矩阵(也称为多通道图像),这些方法将无法工作.如果您真的想使用flipud或者rot90,请考虑使用for循环迭代每个通道并自行翻转通道.

因此,根据您的图像X,执行以下操作:

Xout = [];

for i = 1 : size(X, 3)
    Xout = cat(3, Xout, flipud(X(:,:,i))); %// or Xout = cat(3, Xout, rot90(X(:,:,i)));
end
Run Code Online (Sandbox Code Playgroud)

Xout 将包含您完全转换的图像.

FWIW:使用imrotate更清洁(丹尼尔的方法).我建议你改用它.

在旁边

在你的代码,getframe并且frame2im将返回RGB数据的帧.因此,您的图像自然会是多渠道的:)