如何在使用线程的c ++ winform中同时显示网络摄像头

Posted

技术标签:

【中文标题】如何在使用线程的c ++ winform中同时显示网络摄像头【英文标题】:how to show webcams at a same time using in c++ winform using threads 【发布时间】:2021-08-13 09:41:38 【问题描述】:

我想使用线程在两个不同的图片框上显示我的网络摄像头。 但问题在于图片框显示网络摄像头,而另一个仅显示网络摄像头的静态图片。 我希望两个图片框同时显示网络摄像头,但我希望使用线程来提高性能。 任何想法如何解决它? 将不胜感激;

这是代码

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgcodecs/imgcodecs.hpp>
#include <opencv2/imgproc/imgproc.hpp>

Mat _frame1;

Mat _frame2;

bool s1 = false;
bool s2 = false;

void start_picture_Box1()

    s1 = true;
    VideoCapture cap(0);
    while (s1) 
        cap >> _frame1;

        mat2picture bimapconvert;
        this->pictureBox1->Image = bimapconvert.Mat2Bimap(_frame1);

        pictureBox1->Refresh();
        if (waitKey(1) == 27) 
            break;
        
    


void start_picture_Box2()

    s2 = true;
    VideoCapture cap1(0);
    while (s2) 
        cap1 >> _frame2;

        mat2picture bimapconvert;
        this->pictureBox2->Image = bimapconvert.Mat2Bimap(_frame2);

        pictureBox2->Refresh();
        if (waitKey(1) == 27) 
            break;
        
    


public: void picture_Box1()


    Invoke(gcnew System::Action(this, &MyForm::start_picture_Box1));


 public: void picture_Box2()
 
     Invoke(gcnew System::Action(this, &MyForm::start_picture_Box2));
 


private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)

ThreadStart^ ThreadMethod1 = gcnew ThreadStart(this, &MyForm::picture_Box1);
ThreadStart^ ThreadMethod2 = gcnew ThreadStart(this, &MyForm::picture_Box2);
Thread^ MyThread1 = gcnew Thread(ThreadMethod1);
Thread^ MyThread2 = gcnew Thread(ThreadMethod2);
MyThread1->Start();
MyThread2->Start();


private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) 
s1 = false;
s2 = false;

【问题讨论】:

【参考方案1】:

首先,您在从不同来源获取输入的两个图像中进行 VideoCapture。

如果您在主线程上进行视频捕获并将来自网络摄像头的图像存储在一个框架中并将其发送到您想要的不同线程会更好。

【讨论】:

你能给我看一个示例代码吗?我被这个程序卡住了

以上是关于如何在使用线程的c ++ winform中同时显示网络摄像头的主要内容,如果未能解决你的问题,请参考以下文章

winform程序在执行一个方法的同时,如何使用progressbar显示进度?

C#winform使用了多线程,有时候程序再运行中直接就退出了!

如何在 c++ winform 中的线程之间传递数据?

winform中如何在多线程中更新UI控件--ListView实时显示执行信息

Winform在线程中怎么让MessageBox显示置顶

怎么异步显示加载中 winform