【问题标题】:Error when trying to access frames from multithreading video capturing尝试从多线程视频捕获中访问帧时出错
【发布时间】:2017-11-09 09:04:23
【问题描述】:

我正在使用 ltbb 从两个摄像头进行流式传输。 ltbb 创建两个线程(因为有两个摄像头)用于同时从两个摄像头流式传输。它利用并发队列来获取帧。以下代码 sn -p 显示帧:

while (waitKey(20) != 27)
  {
    //Retrieve frames from each camera capture thread
    vector<Mat> iMats(capture_source.size());

    for (int i = 0; i < capture_source.size(); i++)
    {
      Mat frame;

      //Pop frame from queue and check if the frame is valid
      if (cam.frame_queue[i]->try_pop(frame))
      {
        //Show frame on Highgui window
        // IMats.push_back(frame);
        iMats[i] = frame;
        imshow(label[i], frame);
      }

    } // end of for - loop

    int x = opencv_tri(iMats);
  }  

问题是当我在做iMats[i] = frame 并将它传递给其他函数时,它给了我一个错误。 当我评论 iMats 并停止调用 opencv_tri(iMats) 时,它工作正常

错误:Segmentation fault (core dumped)

链接到 opencv_tri: opencv_tri.cpp

谁能解释一下并帮我解决这个问题?

【问题讨论】:

  • 看起来像是一个越界错误...也许您可以尝试使用 [cplusplus.com/reference/vector/vector/at/](at) 函数而不是 [] 运算符。在这种情况下,这个检查并抛出异常。然后你肯定知道你已经越界了。顺便说一句,你应该把函数 opencv_tri 来理解什么是错的。你在哪里frame = iMats[i]?我在您的代码中没有看到它
  • @api55 我已经更新了,它是iMats[i] = frame 并添加了指向opencv_tri 函数的链接。

标签: multithreading opencv segmentation-fault runtime-error


【解决方案1】:

很遗憾,我无法发表评论。 我认为您的向量是空的,因此您无法访问第 [i] 个元素。

vector<Mat> iMats(capture_source.size());

这会创建一个带有 capture_source.size() 元素的空 Vector。

【讨论】:

  • 糟糕,我在代码中做了iMats.push_back(frame),但问题不在于那个。它不是连续流式传输的,我必须按 Esc 键才能显示帧和三角测量。
【解决方案2】:

我没有查看您链接的整个 opencv_tri 函数,但我发现了可能的错误。

你有以下

for(int i = 0;i<imats.size();i+=2)
{

...

 Mat imgATest = imats[i];
 Mat imgBTest = imats[i+1];

iimats.size()-1 中时,它会尝试访问:

Mat imgBTest = imats[i+1];

这是一个越界。因为 i+1 是imats.size()

你必须循环到imats.size()-1

for(int i = 0;i<imats.size()-1;i+=2)
{

这样它就不会尝试访问错误的值

【讨论】:

  • 在这种情况下,imats.size() 的值是2,而我正在做i+=2,所以我无法获得out of bounds error这不是导致错误的原因。
  • 尽管如此这是一个错误。您应该尝试使用调试器至少知道给出错误的确切行。这样更容易发现可能出错的地方。我几乎可以肯定它在opencv_tri 函数内。尝试逐行调试,直到失败。
猜你喜欢
  • 2020-10-28
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多