2013-08-29 30 views
2

我的英語不是很好(IM來自智利),但將嘗試以儘可能最好的方式來解釋(+谷歌翻譯:P)從Microsoft Visual C++遷移代碼的Debian(覆盆子)

以及進出口工作在微軟的Visual C++ 2010 Express和我需要我的OpenCV的代碼移植到Linux上一個rapsberry工作

下面的代碼:

#include "StdAfx.h" 
#include <opencv2\core\core.hpp> 
#include <opencv2\highgui\highgui.hpp> 
#include <opencv\cv.h> 
//#include <iostream> 

using namespace cv; 

int main(int argc, char** argv) 
{ 
//Variable 
CvCapture* capture = 0; 
IplImage* frame = 0; 
IplImage* frame_black = 0; 
IplImage* frame_blue = 0; 
IplImage* frame_red = 0; 
//IplImage* red_gray = 0; 

//Verifica Camara 
capture = cvCaptureFromCAM(1); 
if(!cvGrabFrame(capture)){ 
    printf("error cámara"); 
    exit(0); 
} 

//Comienza 
for(;;){ 

    // Captura imagen from camara 
    frame = cvQueryFrame(capture); 
    if(!frame) break; 

    // filtro negro 
    frame_black = cvCreateImage(cvGetSize(frame),8,3); 
    CvScalar r,g; 
    for(int i=0;i<(frame->height);i++){ 
     for(int j=0;j<(frame->width);j++){ 
      r=cvGet2D(frame,i,j); 
      if((r.val[2]<80)&&(r.val[1]<80)&&(r.val[0]<80)){ 
      g.val[2]=0;  
      g.val[1]=0; 
      g.val[0]=0; 
      cvSet2D(frame_black,i,j,g); 
      } 
      else{ 
      g.val[2]=255; 
      g.val[1]=255; 
      g.val[0]=255; 
      cvSet2D(frame_black,i,j,g); 
      } 
     } 
    } 

    // filtro azul 
    frame_blue = cvCreateImage(cvGetSize(frame),8,3); 
    CvScalar s,c; 
    for(int i=0;i<(frame->height);i++){ 
     for(int j=0;j<(frame->width);j++){ 
      s=cvGet2D(frame,i,j); 
      if((s.val[2]<100)&&(s.val[1]<100)&&(s.val[0]>100)){ 
      c.val[2]=0;  
      c.val[1]=0; 
      c.val[0]=255; 
      cvSet2D(frame_blue,i,j,c); 
      } 
      else{ 
      c.val[2]=255; 
      c.val[1]=255; 
      c.val[0]=255; 
      cvSet2D(frame_blue,i,j,c); 
      } 
     } 
    } 

    // filtro rojo 
    frame_red = cvCreateImage(cvGetSize(frame),8,3); 
    CvScalar p,q; 
    for(int i=0;i<(frame->height);i++){ 
     for(int j=0;j<(frame->width);j++){ 
      p=cvGet2D(frame,i,j); 
      if((p.val[2]>100)&&(p.val[1]<100)&&(p.val[0]<100)){ 
      q.val[2]=255;  
      q.val[1]=0; 
      q.val[0]=0; 
      cvSet2D(frame_red,i,j,q); 
      } 
      else{ 
      q.val[2]=255; 
      q.val[1]=255; 
      q.val[0]=255; 
      cvSet2D(frame_red,i,j,q); 
      } 
     } 
    } 

    /* filtro hough 
    red_gray = cvCreateImage(cvGetSize(frame),8,1); 
    cvCvtColor(frame_red, red_gray, CV_BGR2GRAY); 
    cvSmooth(red_gray, red_gray, CV_BLUR,3); 

    CvMemStorage* storage_var = cvCreateMemStorage(0); 
    CvSeq* results = cvHoughCircles(red_gray, storage_var , CV_HOUGH_GRADIENT , 2, red_gray->height/3); 
    // reemplaza 
    for(int i = 0; i < results->total; i++){ 
     float* p = (float*) cvGetSeqElem(results, i); 
     CvPoint pt = cvPoint(cvRound(p[0]), cvRound(p[1])); 
     cvCircle(red_gray,pt,cvRound(p[2]),cvScalar(0,0,255),1.8); 
    } 
    */ 




    // mostrar en ventana 
    cvShowImage("ventana",frame_black); 
    if(cvWaitKey(10) >= 0) 
    break; 
} 


//Libera de memoria 
cvReleaseCapture(&capture); 
cvReleaseImage(&frame); 
cvReleaseImage(&frame_black); 
cvReleaseImage(&frame_blue); 
cvReleaseImage(&frame_red); 
//cvReleaseImage(&red_gray); 

return 0; 
} 

複製和粘貼代碼到一個文件「codigo.c」和編譯(在linux終端中)用

gcc codigo.c -o codigo $(pkg-config --cflags --libs opencv) 

我有以下錯誤

codigo.c:3:21 fatal error: StdAfx.h: No such file or directory 
compilation terminated. 

很好,谷歌告訴我的StdAfx.h是微軟的Visual C++

的頭在這裏,我崩潰:L

我不知道我現在能做什麼

我希望有人能告訴我一些方法去解決這個問題

thx全部

+0

thx :),現在我只有2個錯誤。 我改變代碼只白衣 的#include 的#include 的#include 和具有下一個問題的工作: codigo.c :9:1錯誤:未知類型名稱'使用' codigo.c:9:17錯誤:預期'=',',';','asm'或'__attribute__'在'cv'之前 –

回答

3

由於您的代碼不依賴於opencv以外的其他任何東西,因此您可以省略stdafx標頭。這是您在此不需要的視覺工作室的功能。

(見Purpose of stdafx.h

它編譯我的機器上的罰款。與:

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv/cv.h> 

注意「/」。請在這裏使用這些而不是反斜槓,否則unix機器會發出抱怨。

另外:使用g ++來編譯這段代碼,而不是gcc。

+0

提示:使用g ++而不是gcc。 g ++是C++編譯器。例如g ++ yourfile.cpp -lopencv_core -lopencv_highgui – dsu

+0

:O!男人很多THX !!!!!!!!!! 現在它的工作XD MUCHAS GRACIAS 現在我可以繼續我的工作:D thx再次 –