【发布时间】:2015-03-25 20:17:44
【问题描述】:
我正在使用这个Function 将 YUV 视频转换为图像。它逐帧读取视频并且工作正常。
我正在遍历所有帧,并且在读取所有帧后必须在最后停止。问题是它没有告诉我已经到达终点并继续以循环方式显示帧,即在最后一帧之后出现第一帧,依此类推。如果我能以某种方式知道我可以打破循环的总帧数。
function[intensity_array] = roi()
intensity_array = [];
for i=1:1000000000
try
image = loadFileYuv('D:\test_data\test_ardu_2sec_short.yuv',320,240,i);
roi = image.cdata([37:52],[278:290],1); % y,x row, column
max_red_intensity = max(max(roi));
intensity_array(end+1) = max_red_intensity;
catch
intensity_array(end+1) = 0;
break
end
disp(['iter:', num2str(i)]);
end
end
我看到,一旦到达最后一帧,就会出现一些错误(如下),然后循环再次开始。那么我可以在那里休息吗?
Error using reshape
To RESHAPE the number of elements must not change.
Error in loadFileYuv (line 18)
imgYuv(:, :, 1) = reshape(buf, width, height).'; % reshape
P.S:它不是 matlab 内置函数,而是开源函数,所以可能没有多少人知道它是如何工作的。但是你肯定可以从它的代码中得到一个想法。
【问题讨论】:
-
请在您的问题中添加示例代码以重现问题。
-
loadFileYuv使用fseek带绝对值跳转到文件中的特定帧,不能重复帧。您的代码中可能有错误。 -
用代码编辑了问题。请检查
-
我无法重现您描述的行为,它没有显示任何框架。
-
image = loadFileYuv('D:\test_data\test_ardu_2sec_short.yuv',320,240,i);上面代码中的i表示帧号。如果它超过了总帧数,仍然会返回一些值。检查任意i那是什么?
标签: matlab image-processing yuv