我的英語不是很好(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全部
thx :),現在我只有2個錯誤。 我改變代碼只白衣 的#include 的#include 的#include 和具有下一個問題的工作: codigo.c :9:1錯誤:未知類型名稱'使用' codigo.c:9:17錯誤:預期'=',',';','asm'或'__attribute__'在'cv'之前 –