由于linux机制的原因,linux下在多个线程中同时使用imshow会导致图像不显示、程序卡死、图像无响应等情况。为了解决这个问题,可以将所有的imshow放在一个单独的线程中显示图像,这样可以在多个线程中同时显示图像。具体代码如下
https://download.csdn.net/download/qq_39638989/19445283
在cpp文件中定义了一个显示全局变量的类
cn::TheadOfImage imageDisplayThead;
在其他cpp文件开头采用如下代码调用这个全局变量
extern cn::TheadOfImage imageDisplayThead;
在主函数中,先使用如下代码打开线程
imageDisplayThead.startShowImages();
采用addIamge添加图像即可自动显示图像
imageDisplayThead.addImage("windowName",Mat_IMG);
closeShowImages方法可以关闭图像显示线程
测试代码如下:
#include "cn_ImshowThread.h"
extern cn::TheadOfImage imageDisplayThead; // 用于单独开一个线程用于显示图像的全家变量类
using namespace std;
using namespace cv;
int main() {
imageDisplayThead.startShowImages();
cv::Mat img1 = cv::Mat(100,100,CV_8UC1);
cv::Mat img2 = cv::Mat(200,200,CV_8UC1);
imageDisplayThead.addImage("img1",img1);
imageDisplayThead.addImage("img2",img2);
cin.get();
imageDisplayThead.closeShowImages();
return 0;
}