【问题标题】:How to crop a Mat to ROI in Emgu (OpenCV for C#)如何在 Emgu 中将 Mat 裁剪为 ROI(C# 的 OpenCV)
【发布时间】:2017-05-23 14:04:48
【问题描述】:

我发现推荐使用的一些答案:

frame = ...
Rectangle ROI = ...
Mat crop = new Mat(frame, ROI) 

但这似乎不适用于 Emgu 3.x

【问题讨论】:

    标签: c# .net opencv emgucv


    【解决方案1】:

    Ahmed,你真的不必为了创建一个 Mat 而创建一个 Image。请尝试以下操作:

    Mat myNewMat = new Mat(input, crop_region);
    

    由于您没有 RotatedRect,因此您不必将旋转的矩形转换为直立的矩形。因此,您可以从现有的 Mat 和矩形创建一个新的 Mat。

    这应该可以工作并且可以简化你的代码。

    道格

    【讨论】:

      【解决方案2】:

      我想通了。要裁剪 Mat,您必须使用 Image 对象作为缓冲区并使用其 .ROI 属性:

      Mat crop_color_frame(Mat input, Rectangle crop_region)
      {
        /*
         * TODO(Ahmed): Figure out why I had to copy this into this class.
         * */
        Image<Bgr, Byte> buffer_im = input.ToImage<Bgr, Byte>();
        buffer_im.ROI = crop_region;
      
        Image<Bgr, Byte> cropped_im = buffer_im.Copy();
      
      
        return cropped_im.Mat;
      
      }
      

      【讨论】:

      • 嗨,我坚持这个。在我得到 Mat myNewMat = new Mat(input, crop_region);我无法使用像 writer.Write(myNewMat);这样的 VideoWriter 保存它;
      【解决方案3】:

      艾哈迈德,什么不起作用?你没有得到一个带有数据的垫子吗?什么是“框架”是“框架”一个垫子?您的投资回报率是 RotatedRect 吗?因为如果您使用的 RotatedRect 不起作用,那么您是对的。如果框架是垫子,那么您正在做的事情应该可以正常工作。需要一些关于不工作的细节。

      【讨论】:

      • 这只是一个语法错误,但我找到了在 C# 中裁剪帧的正确方法。
      猜你喜欢
      • 1970-01-01
      • 2013-04-07
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多