0

到现在为止我学到了一件事,我用 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
程序意外完成。

4

3 回答 3

10

致所有相关人员:

解决 Jaydeep 的问题

[xcb] 出队时队列中有未知请求

[xcb] 这很可能是一个多线程客户端并且 XInitThreads 没有被调用

[xcb] 中止,抱歉。

错误:未在此范围内声明“XInitThreads”

通过链接 X11,包括 xlib,并调用 XInitThreads。

包含 xlib 和调用 XInitThreads 的示例:

// main.cpp
#include <thread> 
#include <X11/Xlib.h>

int main() {
   XInitThreads();
   // . . . 
}

链接示例:

g++ main.cpp -o my_program -std=c++0x -pthread -lX11 /* -pthread if you're on Linux */

当然,不要忘记链接您的应用程序可能需要的其他文件

于 2013-05-16T01:21:17.390 回答
-1

imshow() 方法似乎不是线程安全的。如果你使用python,可以这样解决:

self.img_lock = threading.Lock()

with self.img_lock:
  cv2.imshow()
  cv2.waitKey(1)

于 2021-08-10T11:37:36.700 回答
-6

线程关闭。

我不知道为什么会出现问题,但我已经解决了..

感谢RA。表现出极大的兴趣:)

于 2012-07-17T00:38:20.317 回答