#include <iostream>
#include <opencv2/opencv.hpp>
#include <thread>
using namespace std;
using namespace cv;
void testThread(OutputArray image){
image.create(100,32,CV_8U);
}
// void testThread(Mat image){
// image.create(100,32,CV_8U);
// }
// void testThread(Mat& image){
// image.create(100,32,CV_8U);
// }
int main(int argc,char** argv){
Mat left= imread("./left.png",CV_8U);
Mat right=imread("./right.png",CV_8U) ;
thread t1(testThread,left);
thread t2(testThread,right);
t1.join();
t2.join();
// testThread(left);
// testThread(right);
return 0;
}
Почему он работает нормально в последовательном режиме и генерирует исключение параллельно? Также, если вы измените прототип testThread на второй, он также будет работать нормально в parllel, но потерпит неудачу для третьего. Информация об исключении, выводимая на консоль, выглядит следующим образом:
OpenCV(3.4.1) Error: Assertion failed (!fixedSize() || ((Mat*)obj)->size.operator()() == Size(_cols, _rows)) in create, file /home/linjiaqin/software/opencv-3.4.1/modules/core/src/matrix_wrap.cpp, line 1240
terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(3.4.1) /home/linjiaqin/software/opencv-3.4.1/modules/core/src/matrix_wrap.cpp:1240: error: (-215) !fixedSize() || ((Mat*)obj)->size.operator()() == Size(_cols, _rows) in function create