2017-04-18 20 views
0

我正在使用openCV 2.4.9。我在新窗口中使用OpenCV運行相機打開相機。我想通過按鍵更改相機饋送的顏色。例如,當我點擊'1'照相機進紙改變爲灰度,'2' - >黑白,'3' - > HSV,並且當我按'ESC'時返回(0)。這是我已經想出了到目前爲止:OpenCV實時改變攝像頭的顏色

#include <iostream> 
#include <conio.h> 
using namespace std; 

#include<opencv\cv.h> 
#include<opencv\highgui.h> 
#include "opencv2\core\core.hpp" 
#include "opencv2\imgproc\imgproc.hpp" 


void main(){ 

    CvCapture *capture = cvCaptureFromCAM(CV_CAP_ANY); 
    IplImage *frame = 0, *image = 0; 
    int key = 0, last = 0; 

    cvNamedWindow("WebCamera", CV_WINDOW_AUTOSIZE); 

    while(key != 27) { 

      frame = cvQueryFrame(capture); 
      image = cvCloneImage(frame); 

     // i try to use swich and case for this but i can't get it work 
     // when using cvtColor need to use Mat image but when use cvShowImage need IplImage 
     // switch(last) 
     // { 
     //  case '1': 
     //   cvtColor(image,HSVimage,CV_BGR2HSV); 
     //  case '2': 
     //   cvtColor(image,HSVimage,CV_BGR2GRAY); 
     //  case '3': 
     //   . 
     //   . 
     //  default: break; 
     // } 


      cvShowImage("WebCamera", image); 
      cvReleaseImage(&image); 
      key = cvWaitKey(1); 
      if (key != -1) last = key; 
    } 
    cvDestroyWindow("WebCamera"); 
    cvReleaseCapture(&capture); 

    exit(0); 
} 

我想在同一個窗口或一次又一次地改變顏色(如果它是不可能的),打開和關閉窗口的每一個濾色器。謝謝。對不起,英語不好

+1

不要使用IplImage,而應該使用Mat。並使用C++語法。 – PSchn

+0

我嘗試使用墊子。但我不知道如何爲我們改變顏色相同的窗口 –

+0

看到我的答案在 – PSchn

回答

2

它應該與下面的代碼一起使用。從this OpenCV教程和從OpenCV documentation得到它。

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

using namespace cv; 
using namespace std; 

int main() 
{ 
    int key = 0, last = 0; 
    VideoCapture cap(0); // open the default camera 
    if(!cap.isOpened()) // check if we camera is opened 
    { 
     cout << "Cannot open selected camera" << endl; 
     return -1; 
    } 
    namedWindow("Capture",1); 
    Mat convertedImage; 

    for(;;) //Loop until user hit "esc" 
    { 
     Mat frame; 
     cap >> frame; // get a new frame from camera    

     switch(last) 
     { 
      case '1': 
      { 
       cvtColor(frame,convertedImage,CV_BGR2GRAY); 
       break; 
      } 
      case '2': //Binarization to generate Black/White image 
      { 
       Mat img_gray; 
       cvtColor(frame,img_gray,CV_BGR2GRAY); //First convert to gray 
       //Binarization. Use your parameters here or try adaptiveThreshold 
       threshold(img_gray, convertedIamge, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU); 
      } 
      case '3': 
      { 
       cvtColor(frame,convertedImage,CV_BGR2HSV); 
       break; 
      } 
      default: //use to prevent ecxeption at program start or use case '0' to show original image 
      { 
        convertedImage = frame; 
      } 
     } 

     imshow("Capture", convertedImage); //show converted image 

     key = waitKey(1); 
     if (key != -1)    
      last = key; 

     if(key == 27) 
      break;    

     // the camera will be deinitialized automatically in VideoCapture destructor 
    } 
    return 0; 
} 
+0

我得到這個與斷點錯誤。 OpenCV錯誤:斷言失敗(size.width> 0 && size.height> 0)在cv :: imshow,文件.. \ .. \ .. \ .. \ opencv \ modules \ highgui \ src \ window.cpp,line 261 –

+0

我忘記了默認情況(更新了代碼)。開始時最後是0,轉換後的圖像未定義! – PSchn

0

我沒有檢查過(編譯)..但我認爲它可以幫助你。

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

int main() { 
VideoCapture stream1(0); 

if (!stream1.isOpened()) { cout << "cannot open camera"; } 

while (true) { 
Mat cameraFrame; 
stream1.read(cameraFrame); 
switch(last) 
{ 
case '1': 
cvtColor(image,HSVimage,CV_BGR2HSV); 
break; 
case '2': 
cvtColor(image,HSVimage,CV_BGR2GRAY); 
break; 
case '3': 
...} 
imshow("cam", cameraFrame); 
key = cvWaitKey(1); 
if (key != -1) last = key; 
} 
return 0; 
} 
相關問題