【发布时间】: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