linux下opencv多线程显示图像

这篇博客介绍了Linux环境中因机制原因导致多线程使用imshow可能出现的问题,如图像不显示、程序卡死等,并提出了解决方案。通过创建一个单独的线程专门用于显示图像,可以在多个线程中同步显示图像。提供了相关代码示例,包括如何启动显示线程、添加图像以及关闭显示线程,帮助开发者解决多线程图像显示的难题。
摘要由CSDN通过智能技术生成

由于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;
}

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值