到现在为止我学到了一件事,我用 OpenCV 做错了,Qt 在错误中没有任何作用
我试图在不同的线程中运行两种方法,但它给了我错误:
[xcb] 出队时队列中有未知请求
[xcb] 这很可能是一个多线程客户端,并且 XInitThreads 尚未被调用
[xcb] 中止,对此感到抱歉。
Blurring_Images:../../src/xcb_io.c:178:dequeue_pending_request:断言“!xcb_xlib_unknown_req_in_deq”失败。
程序意外结束。
这是我的代码:
void Dialog::blurImages(int b)
{
QtConcurrent::run(this,&Dialog::homogenour_blur,b);
QtConcurrent::run(this,&Dialog::gaussianBlur,b);
}
void Dialog::homogenour_blur(int b)
{
cv::blur(img,img1,cv::Size(b,b));
showImage("Homogenous Blur",img1);
}
void Dialog::gaussianBlur(int b)
{
cv::GaussianBlur(img,img2,cv::Size(b,b),b);
showImage("Gaussian Blur",img2);
}
而如果我注释掉一个电话(如下所示),它运行良好
void Dialog::blurImages(int b)
{
QtConcurrent::run(this,&Dialog::homogenour_blur,b);
//QtConcurrent::run(this,&Dialog::gaussianBlur,b);
}
真的很烦人,求救!!
编辑: 我没有调用 showImage(),而是将其替换为实际的 OpenCV 调用(见下文):
void Dialog::homogenour_blur(int b)
{
cv::blur(img,img1,cv::Size(b,b));
//showImage("Homogenous Blur",img1);
cv::imshow("Homogenous Blur",img1);
}
void Dialog::gaussianBlur(int b)
{
cv::GaussianBlur(img,img2,cv::Size(b,b),b);
//showImage("Gaussian Blur",img2);
cv::imshow("Gaussian Blur",img2);
}
现在我得到的错误是:
原始图像:X 服务器:0 上的致命 IO 错误 11(资源暂时不可用)。
原始图像:X 服务器上的致命 IO 错误 0(成功):0。
致命错误:销毁后访问了全局静态“KGlobalSettings *s_self()”。定义在 ../../kdeui/kernel/kglobalsettings.cpp:190
程序意外完成。