我正在使用ltbb从两台摄像头流式传输。 ltbb创建两个线程(因为两个摄像头),用于从两个摄像头同时进行流式传输。它利用并发队列来获取帧。以下代码段显示了框架:
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
任何人都可以解释并帮我解决这个问题吗?
答案 0 :(得分:0)
不幸的是,我无法发表评论。 我认为你的矢量是空的,因此你无法访问[i]&#39;元素。
vector<Mat> iMats(capture_source.size());
这会使用capture_source.size()元素创建一个空Vector。
答案 1 :(得分:0)
我没有浏览你链接的整个opencv_tri函数,但我发现了可能的错误。
你有以下
for(int i = 0;i<imats.size();i+=2)
{
...
Mat imgATest = imats[i];
Mat imgBTest = imats[i+1];
当i
位于imats.size()-1
时,它会尝试访问:
Mat imgBTest = imats[i+1];
这是一个出界。因为i + 1是imats.size()
您必须循环到imats.size()-1
for(int i = 0;i<imats.size()-1;i+=2)
{
这样它就不会尝试访问错误的值