2017-06-14 11 views
0

私はComputer Visonの中間体であり、opencv pythonにはかなり堪能ですが、C++になっています。ビデオフィードからROIを選択し、切り取られたフィード。私のコードはこのように見えます。ビデオフレームは、esc、スペースバーまたはエンターキーが押されたときにのみ表示されます。OpenCV C++

#include "opencv2/highgui.hpp" 
#include "opencv2/imgproc.hpp" 
#include "opencv2/objdetect/objdetect.hpp" 
    #include "opencv2/tracking.hpp" 
#include "iostream" 
using namespace cv; 
using namespace std; 
int main() { 

Mat frame1; 
VideoCapture cap; 
cap.open(0); 
cap.read(frame1); 
Rect2d roi = selectROI(frame1, true); 
Mat Crop = frame1(roi); 

while (1) { 

    cap.read(frame1); 
    Crop = frame1(roi); 
    if (Crop.empty()) { 
     cerr << "ERROR! blank frame grabbed\n"; 
     break; 

    } 
    imshow("roi", Crop); 
    int key=waitkey(0); 

} 
} 

コードがコンパイルされ、トリミングされたウィンドウは、しかし、私はビデオfeed.Weirdを取得するには、スペースバーまたはESCを入力してクリックすることが必要で、常に午前見られていますか?

+0

私は、エンド当たり前でwaitkeyにする必要があり、明らかにそこに追加するのを忘れ! – rob

+0

質問を編集してコードを修正することができますが、これはおそらく問題です - 'waitKey(0)'の代わりに 'waitKey(1)'を使用してください – slawekwin

+0

実際に働いてくれてありがとう.....私は気づきませんでしたキーボードは無限のキー押しを待っていた...何かがロジックに間違っていたと思った..非常にばかげた、感謝aton !!! – rob

答えて

1

修正されたコードの正しいバージョンは次のようになります。ヘルプがありがとうございます。

#include "opencv2/highgui.hpp" 
#include "opencv2/imgproc.hpp" 
#include "opencv2/objdetect/objdetect.hpp" 
#include "opencv2/tracking.hpp" 
#include "iostream" 
using namespace cv; 
using namespace std; 
int main() { 

Mat frame1; 
VideoCapture cap; 
cap.open(0); 
cap.read(frame1); 
Rect2d roi = selectROI(frame1, true); 
Mat Crop = frame1(roi); 

while (1) { 

cap.read(frame1); 
Crop = frame1(roi); 
if (Crop.empty()) { 
    cerr << "ERROR! blank frame grabbed\n"; 
    break; 

} 
imshow("roi", Crop); 
*int key=waitkey(1)*; 

}}

+0

変更を強調表示して、誰かが似たような問題を抱えて自分の回答を受け入れると気付くのが簡単になるようにしてください – slawekwin

関連する問題