今まで私は1つのことを学びました.OpenCVでやっていることが間違っています.Qtはエラーに何の役割もありません.
異なるスレッドで 2 つのメソッドを実行しようとしていますが、エラーが発生します。
[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);
}
一方、1つの呼び出しをコメントアウトすると(以下に表示)、正常に実行されます
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 サーバー :0 で致命的な IO エラー 0 (成功)。
致命的なエラー: 破棄後にグローバルな静的 'KGlobalSettings *s_self()' にアクセスしました。../../kdeui/kernel/kglobalsettings.cpp:190 で定義されています
プログラムが予期せず終了しました。