Qt5.7とOpenNIを使用してC++で記述されたマルチスレッドアプリケーションがあります。 .oni録音ファイル(asus xtion pro live)からフレームをキャプチャする第2のスレッドを開始するメインスレッドがあり、Qtシグナルスロット機構を介してフレームをメインスレッドに渡します。を使用して表示します。 私がやりたいことは、一時停止キーを実装することです。たとえば、処理の一時停止を 'p'押すことです。単純にブロック全体のプロセス、私はフレームが別のスレッド(メイン1)で表示されるので、それはだと思う、それは動作しません。このようにマルチスレッドアプリケーションでopencv waitKey()を使用
void Camera::run(){
while(!cameraStop && this->device.isValid())
{
try {
if (!buttonPause) {
getFrame();
process();
emit sigFrameImageReady(frame);
if (cv::waitKey(1)==112){
setButtonPause(!(getButtonPause()));
}
}
}
catch(std::exception &ex) {
std::cerr << "getFrame()" << ex.what() << std::endl;
}
}
}
ここwaitKey()
を、私はこのような何かを考えていますしかし、私はこのように単にimshow()
後、メインスレッドにそれを置く場合:
void Process::FrameImageReady(cv::Mat FrameImage)
{
if (modedebug)
cv::imshow("bgr", FrameImage);
if (cv::waitKey(1)==112){
cam->setButtonPause(!(getButtonPause()));
}
}
waitkeyを任意のアイデア...(画像罰金作品を表示する)は無視しているようですか?
EDIT GUI部分はデバッグ目的のみです。
'imshow'、' waitKey'や 'highgui'の他の機能は、デバッグのためだけのものです。既にQtを使用しているので、Qtの機能を使って画像を表示することをお勧めします。これはスレッドで正しく動作します。 – Miki
画像表示がうまく動作していますが、唯一の問題はwaitkey()です。同じ機能を持つQt関数を使用することをお勧めしますか?あなたは1つを提案できますか? – rok
[KeyEvent](http://doc.qt.io/qt-5/qkeyevent.html)をチェックしてください。実際には私のものではありません...私はOpenCVの機能性のために、すべてのGUI用にQtを使うことを提案しています複雑な作業には使用されません。 – Miki