2017-02-13 6 views
-2

私は灰色に変換したビデオキャプチャに矩形を描きたい。ビデオキャプチャをgracaleにして、opencvを使って矩形を描画しますか?

これは私のコードです:結果で

#include <opencv2/core.hpp> 
#include <opencv2/imgcodecs.hpp> 
#include <opencv2/highgui.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 
#include <iostream> 
using namespace cv; 
using namespace std; 

int main(int argc, char* argv[]) 
{ 
    VideoCapture cap(0); 
    if (!cap.isOpened()) 
    { 
     // print error msg 
     return -1; 
    } 

    namedWindow("gray", CV_WINDOW_AUTOSIZE); 
    int pointf[8][4] = { 
          {100,100 , 150,50}, 
          {100,250 , 150,200}, 
          {100,430 , 150,380}, 
          {295,200 , 345,150}, 
          {295,400 , 345,350}, 
          {490,100 , 540,50}, 
          {490,250 , 540,200}, 
          {490,430 , 540,380} 
          }; 
    int i; 
    int j; 
    Mat frame; 
    Mat gray; 
    for (;;) 
    { 
     cap >> frame; 

     cvtColor(frame, gray, CV_BGR2GRAY); 
     for (i = 0; i < 8; i++) { 
      rectangle(frame, Point(pointf[i][0],pointf[i][1]), Point(pointf[i][2], pointf[i][3]), Scalar(0, 0, 255), 3); 
     } 
     imshow("gray", gray); 
     imshow("gray",frame); 
     if (waitKey(30) >= 0) 
      break; 

    } 

    return 0; 

} 

、私は長方形の8を描くように成功するが、ビデオはグレースケールではありません。 imshowを並べ替えると(最初にビデオをグレーにしてから矩形を描くと)、グレースケールのビデオが作成されますが、矩形は表示されません。

だから私は何をすると思いますか? 私はopen cvを使うのが新しいです。 私はビジュアルスタジオでopen cv 3.1.0とC++を使用しています。2015 ありがとうございました。

答えて

0

コードをよく見てください。ここで何をやっているのです:

imshow("gray", gray); 
    imshow("gray",frame); 

これはありませんが、最初に、グレーと呼ばれるウィンドウでグレースケール画像を表示し、その直後に同じウィンドウでカラー画像frameが表示されていることです。つまり、あなたはグレーのイメージをまったく見ることができません。それはあなたのの最初のエラーです。

あなた2番目のエラーは声明である:あなたがすべてであなたのグレー画像上の四角形を描画していないので、

rectangle(frame, Point(pointf[i][0],pointf[i][1]), Point(pointf[i][2], pointf[i][3]), Scalar(0, 0, 255), 3); 

frameは、あなたのRGB画像、なく、あなたのグレー画像です。

あなたはグレースケールとそれに四角形を描画するためにあなたの元画像を変換する必要がある場合は、ここで何あなたのDOです:

for (;;) 
    { 
     cap >> frame; 

     cvtColor(frame, gray, CV_BGR2GRAY); 
     for (i = 0; i < 8; i++) { 
      //draw rect on gray, not frame 
      rectangle(gray, Point(pointf[i][0],pointf[i][1]), Point(pointf[i][2], pointf[i][3]), Scalar(0, 0, 255), 3); 
     } 
     //display the Mat objects in different windows 
     imshow("gray", gray); 
     imshow("original",frame); 
     if (waitKey(30) >= 0) 
      break; 

    } 
は、
関連する問題