C++ 从cv::Mat到QImage的快速转换方法
我想知道是否有一种快速的方法可以将Mat转换为QImage。我有以下转换课程:C++ 从cv::Mat到QImage的快速转换方法,c++,qt,opencv,C++,Qt,Opencv,我想知道是否有一种快速的方法可以将Mat转换为QImage。我有以下转换课程: VideoReader::VideoReader() { cap = VideoCapture( CV_CAP_ANY ); } QImage VideoReader::getFrame() { if (waitKey(30) >= 0) return; Mat frame; cap >> frame; QImage dest = QIm
VideoReader::VideoReader() {
cap = VideoCapture( CV_CAP_ANY );
}
QImage VideoReader::getFrame() {
if (waitKey(30) >= 0)
return;
Mat frame;
cap >> frame;
QImage dest = QImage((uchar*)frame.data, frame.cols, frame.rows, frame.step, QImage::Format_RGB888);
return dest;
}
这段代码可以工作,但是getFrame()方法大约需要20毫秒才能完成。我需要一个至少快一倍的东西。是否有任何方法可以优化此/任何其他转换方法,从而更快地工作
谢谢 waitKey(30)
将暂停您的代码约30毫秒
这一行在该函数中没有多大意义,因此最好将其删除。创建一个QImage的方法不应该超过几微秒,因为没有图像被复制等。。。然而,cap>>frame
可能需要一些时间,这取决于您的捕获设备(但您不能对此做太多)
如果您确实需要
waitKey
您应该使用waitKey(1)
以避免在那里浪费太多时间。删除If(waitKey(30)>=0)返回代码>大约需要30毫秒谢谢,仍然需要15毫秒左右,一定是摄像头延迟。waitKey(1)
在典型的windows系统上,afaik大约需要5-10毫秒。如果没有图像还没有准备好,相机通常会阻止捕捉调用,因此,如果您的相机具有30 fps的速度,仅调用cap>>frame
大约需要33 ms(如果没有其他东西会占用两次调用之间的时间)。