我在MatLab中制作一个GUI,要求用户上传视频文件。 接下来我想在具有固定窗口大小的轴上播放它。但是,如果上传的文件很大,Matlab将扩展轴并接管我的大部分GUI。有没有办法缩小图像以使其适合轴?
有谁知道如何解决这个问题?
答案 0 :(得分:0)
如果图像太大,通常不会改变Matlab轴的位置。
我可以想到两个可能的问题:
答案 1 :(得分:0)
这个问题已经过时了,但我偶然发现了这个问题(寻找其他的东西)所以也许它会帮助别人看到我做了什么。
我想调整相当大的图像(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