gpt4 book ai didi

c++ - 使用线程刷新opencv的问题

转载 作者:太空宇宙 更新时间:2023-11-04 14:23:48 28 4
gpt4 key购买 nike

我正在使用两个线程:

线程 1 是从相机获取帧并处理它们的线程线程 2 是使用 cvshowimage 显示它们的线程

在第二个线程中我使用了 cvWaitKey(200); (我也尝试了其他值..)

问题是显示了第一张图像,但过了一会儿它们就不再显示了(当您尝试移动窗口时会出现同样的情况。它卡住,有时图像变成空白..

知道如何解决这个问题吗?

编辑:当我在线程中显示图像时,我丢失了帧。应该是正常的吧?

编辑2:我还尝试在线程中可视化 2 个旧帧而不是新帧但输出相同..

编辑3:这就是我或多或少正在做的事情:

void *showImages( void *ptr )
{
bool showit = false;
while (!MainThreadHasFinished)
{

pthread_mutex_lock( &mutex1 );
if(ImageGenerated = true)
showit = true;
else
showit = false;
pthread_mutex_unlock( &mutex1 );

showit = true;

if(showit == true)
cvShowImage( "RGB Image", RGBImage);

cvWaitKey(500);
}}


IplImage *RGBImage;
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
bool ImageGenerated;

int main(int argc, char** argv)
{
//init camera and other stuff
int frameCounter=0;
RGBImage = cvCreateImage( cvSize(RGB_RES_X,RGB_RES_Y),8,3);
int iret1 = pthread_create( &showImagesThread, NULL, showImages, (void*) message1);

for (;;) {
pthread_mutex_lock( &mutex1 );
ImageGenerated = false;
pthread_mutex_unlock( &mutex1 );

//get frame here in showImg

frameCounter++;
if(frameCounter == 10) frameCounter=0;

if(frameCounter == 2)
cvCopy(&showImg,RGBImage);
pthread_mutex_lock( &mutex1 );
ImageGenerated = true;
pthread_mutex_unlock( &mutex1 );

//other stuff
}

}

干杯

最佳答案

我不确定尝试从另一个线程在 GUI 上显示某些内容是否是个好主意。除非我误解了你的意思,否则你应该直接从 GUI 线程调用 cvshowimage

关于c++ - 使用线程刷新opencv的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5620093/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com