2016-08-01 33 views
1

MatからQImageに変換する簡単な方法があるのだろうかと思います。私は、変換のための以下のクラスがあります。cv :: MatからQImageに変換する速い方法

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ミリ秒かかります。少なくとも2倍の速さで作業する必要があります。これを最適化する方法はありますか、より速く動作する代替変換方法はありますか?

ありがとうございます!

+0

'if(waitKey(30)> = 0)return;'約30msかかります。 – Micka

+0

ありがとう、まだ15ミリ秒程度かかりますが、カメラの待ち時間が必要です。 – bearcp

+0

'waitKey(1)'は典型的なWindowsシステムafaikで約5-10msを消費します。カメラは通常、画像が準備されていない場合にはキャプチャ呼び出しをブロックするので、カメラが例えば30fpsの場合、 'cap >> frame'を呼び出すには約33msかかります(2回の呼び出しの間に何も時間がない場合) 。 – Micka

答えて

1

waitKey(30)は約30ミリ秒間コードを一時停止します。

この行はあまり意味をなさないので、削除してください。 QImageを作成するあなたのやり方は、画像がコピーされないなどの理由で、数マイクロ秒以上かかることはありません。しかし、cap >> frameは、キャプチャデバイスに応じて時間がかかることがあります。

waitKeyが本当に必要な場合は、waitKey(1)を使用して時間を無駄にしないでください。

関連する問題