OpenCV的.clone()和OpenMP抛出随机未处理的异常

时间:2017-04-10 07:23:14

标签: c++ opencv openmp

我班级的构造函数如下:

Foo::Foo(const cv::Mat &img){
        _img = img.clone();
}

我本质上是尝试在80个不同的图像上运行80个模板并尝试运行omp并行for循环,这在大多数情况下都能正常工作。

int imgNum = 80;
std::vector<cv::Mat> imgStack(imgNum);
setImgStack(imgStack);
#pragma omp parallel for
for(int i = 0; i < imgNum; i++)
    shared_ptr<Foo> test(new Foo(imgStack[i]));

然而,在5%左右,我随机获得.clone()行上抛出的未处理异常。

  

test_TemplateMatching.exe中0x00007FFCE4BA982C(opencv_world300.dll)的未处理异常:0xC0000005:访问冲突读取位置0x0000000000000008。

指向此处(在mat.inl.hpp上):

inline
Mat Mat::clone() const
{
    Mat m;
    copyTo(m);
    return m;
}

我想强调的是,当发生这种情况时,它是不可预测的。我可以在成千上万的图像上运行它并记录它失败的地方。再次运行它,我得到不同的失败位置。如果我删除omp也不会发生这种情况,但是在我正在使用的数据集上,将时间加倍到非常不合理的数量。

在使用我不知道的omp时,是否存在克隆图像的某种问题?

0 个答案:

没有答案