我正在 MatLab 中制作一个 GUI,要求用户上传视频文件。接下来我想在具有固定窗口大小的轴上播放它。但是,如果上传的文件很大,Matlab 将扩展轴并接管我的大部分 GUI。有没有办法缩小图像以使其适合轴?
有谁知道如何解决这个问题?
我正在 MatLab 中制作一个 GUI,要求用户上传视频文件。接下来我想在具有固定窗口大小的轴上播放它。但是,如果上传的文件很大,Matlab 将扩展轴并接管我的大部分 GUI。有没有办法缩小图像以使其适合轴?
有谁知道如何解决这个问题?
如果图像太大,通常 Matlab 轴不应该改变它们的位置。
我可以想到两个可能的问题:
这个问题很老,但我偶然发现了这个(寻找别的东西)所以也许它会帮助别人看看我做了什么。
我想调整相当大的图像(1024x 100k-200k 像素)的大小,以便我的 GUI 可以在这些大型数据集的视图上快速演示各种颜色操作。我只是手动对我的数据进行了子采样,如下所示(函数如下)。
请注意,此示例是图像。为了对视频进行空间子采样,我循环播放了视频,并在过去对每一帧进行了类似的操作。
[plotWidthPixels, plotHeightPixels] = getPlotAreaPixels(handles.figure1, handles.axes1);
[nSamplesPerLine nLines] = size(iqData);
colInds = decimateToNumber(nLines,plotWidthPixels);
rowInds = decimateToNumber(nSamplesPerLine,plotHeightPixels);
iqDataToPlot = iqData(rowInds,colInds);
首先,我得到了以像素为单位的轴大小:
function [plotWidthPixels, plotHeightPixels] = getPlotAreaPixels(figHandle, axisHandle)
set(figHandle,'Units','pixels')
figSizePix = get(figHandle,'Position');
set(axisHandle,'Units','normalized')
axSizeNorm = get(axisHandle,'Position');
axisSizePix = figSizePix.*axSizeNorm;
plotWidthPixels = ceil(axisSizePix(3)-axisSizePix(1));
plotHeightPixels = ceil(axisSizePix(4)-axisSizePix(2));
然后我用它通过获取(粗略地)均匀分布的索引子集来抽取图像的宽度和高度:
function inds = decimateToNumber(lengthOfInitialVector, desiredVectorLength, initialIndex)
if nargin < 3
initialIndex = 1;
end
if (lengthOfInitialVector-initialIndex+1) > desiredVectorLength*2
inds = round(linspace(initialIndex,lengthOfInitialVector,desiredVectorLength));
else
inds = initialIndex:lengthOfInitialVector;
end