【问题标题】:how to crop multiple objects from an image in matlab如何在matlab中从图像中裁剪多个对象
【发布时间】:2014-11-16 06:20:31
【问题描述】:

这是从视频中检测物体的代码。

我想逐帧裁剪此视频中的对象。

videoSource = vision.VideoFileReader('viptraffic.avi','ImageColorSpace','Intensity'...
'VideoOutputDataType','uint8');

detector = vision.ForegroundDetector(...
   'NumTrainingFrames', 5, ... 
   'InitialVariance', 30*30);

 blob = vision.BlobAnalysis(...
   'CentroidOutputPort', false, 'AreaOutputPort', false, ...
   'BoundingBoxOutputPort', true, ...
   'MinimumBlobAreaSource', 'Property', 'MinimumBlobArea', 250);

 shapeInserter = vision.ShapeInserter('BorderColor','White');

videoPlayer = vision.VideoPlayer();

while ~isDone(videoSource)

 frame  = step(videoSource);
 fgMask = step(detector, frame);
 bbox   = step(blob, fgMask);
 out    = step(shapeInserter, frame, bbox); 
 step(videoPlayer, out); 
end
release(videoPlayer);  
release(videoSource);

当我想从框架中裁剪 bbox 它总是给我错误“无效的输入参数”

如果我写这个命令。

 frame(bbox(1):bbox(1)+bbox(3), bbox(2):bbox(2)+bbox(4), :);

“索引超出矩阵尺寸”错误来了。 请帮助我如何从图像中裁剪对象

【问题讨论】:

    标签: matlab image-processing matlab-cvst


    【解决方案1】:

    试试

    frame(bbox(2):bbox(2)+bbox(4), bbox(1):bbox(1)+bbox(3), :);
    

    bbox 中的值格式为 [ x y w h ],而frame 中的索引应按行列顺序:您需要将 x 和 y 的顺序更改为行列。

    【讨论】:

    • 使用调试模式并检查frame的大小和bbox的位置。您可能会发现 dbstop if error 命令很有用。
    • 如果你使用上面的语法,你需要确保边界框的坐标,宽度和高度,是整数。我怀疑情况会如此,但始终要记住一些事情。此外,FWIW,请改用imcrop。您可以通过以下方式实现相同的目标:out = imcrop(frame, bbox);
    • 那你的边界框显然不对。不知道该告诉你什么。执行 Shai 的建议并调试您的代码。查看bbox 是什么以及图像的大小。调试您的代码不是我们的工作。
    • @DarkVampire bbox 也可能为空 - 未检测到特定帧的对象。你也应该检查一下。
    • @DarkVampire 使用您当前的代码更新您的帖子。这种来来回回的业务有点累。
    【解决方案2】:

    您需要处理未检测到框(bbox 为空)和检测到多个框(bbox 是 M×2 矩阵)的情况。

    所以你应该有一个循环:

    for i = 1:size(bbox, 1)
      croppedImage = frame(bbox(i, 2):bbox(i, 2)+bbox(i, 4), bbox(i, 1):bbox(i, 1)+bbox(i, 3), :);
      % do something wiht croppedImage
    end
    

    或者,您可以使用imcrop 函数:

    croppedImage = imcrop(bbox(i, :));
    

    请注意,imcrop 将返回一个在 x 和 y 上比其他方法小 1 个像素的数组。

    【讨论】:

      猜你喜欢
      • 2014-07-20
      • 1970-01-01
      • 2014-08-03
      • 2019-01-19
      • 2016-12-05
      • 2011-09-03
      • 2011-06-06
      • 1970-01-01
      相关资源
      最近更新 更多