我有一个使用 OpenCV 进行图像处理的 Qt 应用程序。
OpenCV 1.0 一切正常,但当我升级到 OpenCV 2.0 时,它开始崩溃。我注意到它只会在 Qt 插槽内调用 OpenCV 函数时崩溃。
例如,以下插槽:
void TestClass::on_testButton_clicked() {
IplImage* src = cvLoadImage("test.jpg");
IplImage* dst = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);
cvThreshold(src, dst, 100, 255, CV_THRESH_BINARY);
}
单击 testButton 时崩溃。
但是,如果我在任何其他地方调用相同的 cvThreshold 函数,例如在 main() 函数内部或 Widget 构造函数内部,它就可以正常工作。另外,如果我将相同的代码放在一个单独的函数中,并在同一个插槽中使用 QtConcurrent::run() 调用该函数,它也可以正常工作。
为什么会有这种行为?Qt 插槽中可以进行的操作是否有任何限制?OpenCV 2.0 函数中的哪些更改可能导致冲突?
提前致谢