0

我在线程(pthread)中融合来自视频流的多重曝光图像:

vector<Mat> images;

images.push_back(cv::Mat(displayContext->imageLowExposure->height(),displayContext->imageLowExposure->width(),
                         CV_8UC1,displayContext->imageLowExposure->bits(),displayContext->imageLowExposure->bytesPerLine()));
images.push_back(cv::Mat(displayContext->imageMediumExposure->height(),displayContext->imageMediumExposure->width(),
                         CV_8UC1,displayContext->imageMediumExposure->bits(),displayContext->imageMediumExposure->bytesPerLine()));
images.push_back(cv::Mat(displayContext->imageHighExposure->height(),displayContext->imageHighExposure->width(),
                         CV_8UC1,displayContext->imageHighExposure->bits(),displayContext->imageHighExposure->bytesPerLine()));

Mat exposureFusion;
Ptr<MergeMertens> mergeMertens = createMergeMertens();
mergeMertens->process(images, exposureFusion);

Mat convert;
exposureFusion.convertTo(convert,CV_8UC1,255);

QImage temp (convert.data, convert.cols, convert.rows, convert.step, QImage::Format_Grayscale8);

for (int i = 0; i < displayContext->height; ++i){
    memcpy(displayContext->resultImage->scanLine(i),temp.scanLine(i),size_t(displayContext->resultImage->width()));
}

这段代码给出了很好的结果,resultImage 质量很好。但最终视频速度降低到 5 fps。如果注释 createMergeMertens() 函数,视频速度是正常的 - 30 fps。如何加速 OpenCV createMergeMertens 功能?在 htop 应用程序运行时只有一个核心 100%,其他核心不超过 30%。如何加载所有 CPU 内核?也许我可以在我的显卡 NVIDIA 1060 上使用 GPU?我的系统 - UBUNTU 19.04、QT 5.12.6、Intel® Core™ i3-2120 CPU @ 3.30GHz × 4、OpenCV 4。

4

0 回答 0