我正在尝试使用openMp并行化函数,并且当增加矩阵的大小时我会遇到随机崩溃。在单线程上,即使单个Mat大小高达6000x4000,一切也能正常工作,但在openMp上崩溃。有趣的是,当Mat的尺寸减小到3000x2000时,它的工作正常。
std::vector<std::string> Image_path;
for (int iI = 0; iI < 10; ++iI) {
Image_path.emplace_back("test" + std::to_string(iI) + ".bmp");
}
std::vector<cv::Mat> Images(Image_path.size());
#pragma omp parallel for
for (int iI = 0; iI < Image_path.size(); ++iI) {
Images[iI] = cv::imread(Image_path[iI], cv::IMREAD_GRAYSCALE);
}
编辑:崩溃发生在cv :: imread,但只有在#pragma取消注释时才会发生。 在发现堆栈大小崩溃时仍然会发生。 当把cv :: imread放在批评部分崩溃时不会发生。 我将代码移植到openCv源代码以跟踪具有couse问题的确切行,并且它没有发生。当我将图像大小增加到12000x8000时,一切正常。
OpenCv 3.0,Windows 10,Visual Studio 2013 120mvc 64位。 崩溃 - 读取位置的访问违规