gpt4 book ai didi

c++ - OpenCV C++多线程提高帧率

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:46:10 25 4
gpt4 key购买 nike

我有一个 opencv 程序,其中图像处理对视频捕获中具有稳定且相对较高的帧率很敏感。不幸的是,我所做的所有图像处理都会显着降低帧速率,从而导致我的程序出现错误行为。我相信将相机放在一个单独的线程上并在其自己的线程上进行图像处理会提高帧率,但我不确定该怎么做。谁能指导我完成整个过程?

更新:在对线程进行了一些研究之后,我设法将线程实现到显示经过后处理的最终视频提要的位置。然而,不知何故,我对它的实现导致图像处理方法失败(例如,在我能够成功跟踪移动物体之前,现在无论是否被跟踪都是错误的)。我怀疑这与图像处理算法无法在读入新帧时足够快地处理每一帧有关。我如何改进此实现,以便我的处理方法像在没有多线程的情况下一样工作?

void CaptureFrames() {
VideoCapture capture(0);
if (!capture.isOpened()) {
cout << "cannot open camera" << endl;
}

while (true) {
//CAMERAFRAME is a global Mat defined at the top of my program
capture.read(CAMERAFRAME);
if (waitKey(30) >= 0) { break; }
}
}

void ProcessFrames() {

while (true) {



Mat hsvFrame;
Mat binMat;
Mat grayFrame;
Mat grayBinMat;

if (!CAMERAFRAME.empty()) {
//do image processing functions (these worked before implementing threads and are not causing errors)

imshow("gray binary", grayBinMat);
imshow("multithread test", CAMERAFRAME);
}



if (waitKey(30) >= 0) { break; }
}
}

int main(int argc, char** argv[]) {
thread t1(CaptureFrames);
thread t2(ProcessFrames);

while(true) {
if(waitKey(30) >= 0) {break;}
}

return 0;
}

最佳答案

再次尝试旧版本,但从 ProcessFrames 函数中删除最后一行。

if (waitKey(30) >= 0) { break; }

在显示图像时不要让它再次等待 30 毫秒,while 循环就足够了

关于c++ - OpenCV C++多线程提高帧率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38018095/

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