2016-09-01 5 views
1

まず最初に、私はOpenCVの初心者だと言います。ウェブカメラのライブビデオストリームをRGBからグレースケールに変換しようとしています。ライブビデオフレームをグレースケールに変換する(OpenCV)

私は私の機能で、次のコードを持っている:

VideoCapture cap(0); 

while (true) 
{ 
    Mat frame; 
    Mat grayscale; 
    cvtColor(frame, grayscale, CV_RGB2GRAY); 
    imshow("Debug Window", grayscale); 
    if (waitKey(30) >=0) 
    { 
     cout << "End of Stream"; 
     break; 
    } 
} 

私はそれが完全なものではありません知っています。私はビデオのフレームを取ってフレームに送信し、cvtColorを使用してそれを操作し、それをグレースケールに出力して、それを画面に表示することができます。

誰でも助けていただければ幸いです。

答えて

3

この例を参照してください、ここでは完全なコードが存在し、これはあなたのために働くことを願っています:

#include "opencv2/highgui/highgui.hpp" 
#include <iostream> 

using namespace cv; 
using namespace std; 

int main(int argc, char* argv[]) 
{ 
    VideoCapture cap(0); // open the video camera no. 0 

    if (!cap.isOpened()) // if not success, exit program 
    { 
     cout << "Cannot open the video cam" << endl; 
     return -1; 
    } 


    namedWindow("MyVideo",CV_WINDOW_AUTOSIZE); 

    while (1) 
    { 
     Mat frame; 

     bool bSuccess = cap.read(frame); // read a new frame from video 

     if (!bSuccess) 
     { 
      cout << "Cannot read a frame from video stream" << endl; 
      break; 
     } 

     Mat grayscale; 
     cvtColor(frame, grayscale, CV_RGB2GRAY); 

     imshow("MyVideo", grayscale); 

     if (waitKey(30) == 27) 
     { 
      cout << "esc key is pressed by user" << endl; 
      break; 
     } 
    } 
    return 0; 

} 
+0

#include

0

あなただけの変数「フレーム」に初期化し、それにイメージを割り当てるのを忘れていました。変数 "frame"は空であるため、出力は得られません。画像を取得し、ビデオシーケンス「キャップ」からフレームにコピーします。このコードはあなたのために仕事をします。

Mat frame; 
    bool bSuccess = cap.read(frame); // read a frame from the video 
    if (!bSuccess) 
    { 
     cout << "Cannot read a frame from video stream" << endl; 
     break; 
    } 
関連する問題