如果以任何方式操作了框架大小,我都会遇到光流问题,从而导致出错。有两个选项可以在开始时更改视频的分辨率,或者以某种方式改变帧大小,从而以光流的方式工作。我希望在进一步的开发中添加级联对象来检测鼻子,嘴巴和眼睛,因此我需要解决方案,它可以用于单个区域,而无需为这些区域单独设置光流,特别是边界框不具有固定大小,将在框架之间轻微置换。这是我的代码到目前为止,错误是它超过矩阵尺寸。调整光流大小的框架
faceDetector = vision.CascadeObjectDetector();
vidObj = vision.VideoFileReader('MEXTest.mp4','ImageColorSpace','Intensity','VideoOutputDataType','uint8');
converter = vision.ImageDataTypeConverter;
opticalFlow = vision.OpticalFlow('ReferenceFrameDelay', 1);
opticalFlow.OutputValue = 'Horizontal and vertical components in complex form';
shapeInserter = vision.ShapeInserter('Shape','Lines','BorderColor','Custom','CustomBorderColor', 255);
vidPlayer = vision.VideoPlayer('Name','Motion Vector');
while ~isDone(vidObj);
frame = step(vidObj);
fraRes = imresize(frame,0.5);
fbbox = step(faceDetector,fraRes);
I = imcrop(fraRes,fbbox);
im = step(converter,I);
of = step(opticalFlow,im);
lines = videooptflowlines(of, 20);
if ~isempty(lines)
out = step(shapeInserter,im,lines);
step(vidPlayer,out);
end
end
release(vidPlayer);
release(VidObj);
'vision.opticalFlow'系统对象将在未来版本中删除。 http://se.mathworks.com/help/vision/ref/opticalflow-class.html替代品对我更有吸引力。也就是说,你应该从抽取的“fraRes”计算流量,然后裁剪流量('')。但是,也许你想指出错误的确切路线。我只是猜测。 – mainactual
这些替代品的工作方式与实施方法相同,只是实施方法,我会尝试那些能够裁剪脸部并将光流应用到脸部的方法。我可以做到这一点,但是光流量会在较小的图像上计算得更快,我认为这会更精确,而不是在完整的视频中进行,而我只对脸部区域感兴趣。 – UZIERSKI