ethz-asl / ethzasl_ptam

Modified version of Parallel Tracking and Mapping (PTAM)
http://wiki.ros.org/ethzasl_ptam
235 stars 184 forks source link

Setting Camera using Opencv in PTAMM and PTAM #30

Closed Reena24 closed 10 years ago

Reena24 commented 10 years ago

Hi I am trying to execute the code using another webcam( Intex IT-306WC Webcam : http://www.flipkart.com/intex-it-306wc-webcam/p/itmdzbhp8gsbsfh6?pid=ACCDZBKAUREYCRPD&otracker=from-search&srno=t_4&query=webcam&ref=b83f2815-cc12-409a-90df-15268e72fc14 It has a focus range of 4 to Infinity cm .) I am using OpenCV 2.4.4 with VS2010 in Windows so I saw few codes and tried to make the changes but I get errors which I do not know how to handle. I did not modify the VideoSource.h file but I tried to modify the file in the cpp file VideoSource.h

struct VideoSourceData;

class VideoSource { public: VideoSource(); void GetAndFillFrameBWandRGB(CVD::ImageCVD::byte &imBW, CVD::ImageCVD::Rgb &imRGB); CVD::ImageRef Size();

private: void *mptr; CVD::ImageRef mirSize; };

.cpp file

VideoSource::VideoSource() { VideoCapture* cap = new::VideoCapture;//(VideoCapture*)mptr; mptr = cap; cout << " VideoSource_Windows: Opening video source..." <isOpened(); if(!cap->isOpened()) { std::cerr<<"Could Not Find the Camera or Video "<<std::endl; exit(1);
} else { cout << " ... got video source." << endl; } mirSize = ImageRef(640,480);

};

ImageRef VideoSource::Size() { return mirSize; };

void conversionNB(Mat &frame, ImageCVD::byte &imBW) {

Mat clone = frame.clone();
Mat& frame_p =  Mat(frame.rows,frame.cols, CV_32FC1); //(Mat&)clone;
frame_p = (Mat&)clone;
for (int i = 0; i < 480; i++)
{
    for (int j = 0; j < 640; j++)
    {
        imBW[i][j] = ((frame_p(i,j))[0] + frame_p(i,j)[1] + frame_p(i,j)[2]) / 3;//errpr
    }
}

}

void conversionRGB(Mat &frame, ImageCVD::Rgb &imRGB) {

Mat clone = frame.clone();
Mat_& frame_p = (Mat_&)clone;//error
for (int i = 0; i < 480; i++)
{
    for (int j = 0; j < 640; j++)
    {
        imRGB[i][j].red = frame_p(i,j)[0];//error
        imRGB[i][j].green = frame_p(i,j)[1];//error
        imRGB[i][j].blue = frame_p(i,j)[2];//error
    }
}

}

void VideoSource::GetAndFillFrameBWandRGB(ImageCVD::byte &imBW, ImageCVD::Rgb &imRGB) { Mat frame; VideoCapture* cap = (VideoCapture*)mptr; cap->set(CV_CAP_PROP_FRAME_WIDTH,640); cap->set(CV_CAP_PROP_FRAME_HEIGHT,480); cap->set(CV_CAP_PROP_FPS,30); double fps = cap->get(CV_CAP_PROP_FPS); //get the frames per seconds of the video

 cout << "Frame per seconds : " << fps << endl;
cap->open(1);
*cap >> frame;
//cvCvtColor (&frame,&frame,CV_GRAY2BGR);//
conversionNB(frame, imBW);
conversionRGB(frame, imRGB);
frame.release();

} ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// during compile time I get the error 1>VideoSource_Win32_CMU1394.cpp(56): error C2664: 'cv::Mat cv::Mat::operator ()(cv::Range,cv::Range) const' : cannot convert parameter 1 from 'int' to 'cv::Range' 1> No constructor could take the source type, or constructor overload resolution was ambiguous 1>VideoSource_Win32_CMU1394.cpp(56): error C2664: 'cv::Mat cv::Mat::operator ()(cv::Range,cv::Range) const' : cannot convert parameter 1 from 'int' to 'cv::Range' 1> No constructor could take the source type, or constructor overload resolution was ambiguous 1>VideoSource_Win32_CMU1394.cpp(56): error C2664: 'cv::Mat cv::Mat::operator ()(cv::Range,cv::Range) const' : cannot convert parameter 1 from 'int' to 'cv::Range' 1> No constructor could take the source type, or constructor overload resolution was ambiguous 1>VideoSource_Win32CMU1394.cpp(71): error C3849: function-style call on an expression of type 'cv::Mat' would lose const and/or volatile qualifiers for all 13 available operator overloads 1>VideoSource_Win32CMU1394.cpp(72): error C3849: function-style call on an expression of type 'cv::Mat' would lose const and/or volatile qualifiers for all 13 available operator overloads 1>VideoSource_Win32CMU1394.cpp(73): error C3849: function-style call on an expression of type 'cv::Mat' would lose const and/or volatile qualifiers for all 13 available operator overloads 1> 1>Build FAILED.

Can someone please help me solve this error cause I have been stuck with the code for sometime. Its a bit urgent. I have not been able to run the code because of the error. Maybe because I am using OpenCV 2.4.4 but I am not sure what header file is missing nor how to modify the code for the error

simonlynen commented 10 years ago

Hi @Reena24

thank you for your interest in PTAM. This package however is a version of PTAM for robots running Linux which we branched off the original PTAM version from George Klein nearly 2 years ago. Therefore the support for Windows (and possibly new OpenCV versions) is limited which might be now causing the compilation issues you are seeing. I would recommend downloading the original sources from: https://github.com/Oxford-PTAM/PTAM-GPL

Good websites to get help with this original package are: http://ewokrampage.wordpress.com/ http://www.robots.ox.ac.uk/~gk/PTAM/

Simon

5aou commented 9 years ago

Hi I encounter this error, and I'm using a usb camera,I don't know to resolve it, any suggestion please, g++ -o PTAM main.o GLWindow2.o GLWindowMenu.o VideoSource_Linux_DV.o System.o ATANCamera.o KeyFrame.o MapPoint.o Map.o SmallBlurryImage.o ShiTomasi.o HomographyInit.o MapMaker.o Bundle.o PatchFinder.o Relocaliser.o MiniPatch.o MapViewer.o ARDriver.o EyeGame.o Tracker.o -L/usr/local/lib -lGVars3 -lcvd -lopencv_legacy -lopencv_core -lopencv_video -lopencv_highgui -lGLU -lGL -llapack -lblas VideoSource_Linux_DV.o: dans la fonction « VideoSource::VideoSource() »: VideoSource_Linux_DV.cc:(.text+0xcf): référence indéfinie vers « CVD::DV3::RawDVBuffer3::RawDVBuffer3(CVD::DV3::DV3ColourSpace, int, unsigned long, int, bool, bool, CVD::ImageRef, float, CVD::ImageRef, int) » VideoSource_Linux_DV.o: dans la fonction « CVD::DVBuffer3::frame_pending() »: VideoSource_Linux_DV.cc:(.text._ZN3CVD9DVBuffer3INS_6yuv411EE13frame_pendingEv[_ZN3CVD9DVBuffer3INS_6yuv411EE13frame_pendingEv]+0x5): référence indéfinie vers « CVD::DV3::RawDVBuffer3::frame_pending() » VideoSource_Linux_DV.o: dans la fonction « CVD::DVBuffer3::get_frame() »: VideoSource_Linux_DV.cc:(.text._ZN3CVD9DVBuffer3INS_6yuv411EE9get_frameEv[_ZN3CVD9DVBuffer3INS_6yuv411EE9get_frameEv]+0x5): référence indéfinie vers « CVD::DV3::RawDVBuffer3::get_frame() » VideoSource_Linux_DV.o: dans la fonction « CVD::DVBuffer3::putframe(CVD::VideoFrame) »: VideoSource_Linux_DV.cc:(.text._ZN3CVD9DVBuffer3INS_6yuv411EE9put_frameEPNS_10VideoFrameIS1_EE[_ZN3CVD9DVBuffer3INS_6yuv411EE9put_frameEPNS_10VideoFrameIS1_EE]+0x5): référence indéfinie vers « CVD::DV3::RawDVBuffer3::putframe(CVD::VideoFrame) » VideoSource_Linux_DV.o: dans la fonction « CVD::DVBuffer3::~DVBuffer3() »: VideoSource_Linux_DV.cc:(.text._ZN3CVD9DVBuffer3INS_6yuv411EED1Ev[_ZN3CVD9DVBuffer3INS_6yuv411EED1Ev]+0x1d): référence indéfinie vers « CVD::DV3::RawDVBuffer3::~RawDVBuffer3() » VideoSource_Linux_DV.o: dans la fonction « CVD::DVBuffer3::~DVBuffer3() »: VideoSource_Linux_DV.cc:(.text._ZN3CVD9DVBuffer3INS_6yuv411EED0Ev[_ZN3CVD9DVBuffer3INS_6yuv411EED0Ev]+0x1d): référence indéfinie vers « CVD::DV3::RawDVBuffer3::~RawDVBuffer3() » VideoSource_Linux_DV.o:(.rodata._ZTIN3CVD9DVBuffer3INS_6yuv411EEE[_ZTIN3CVD9DVBuffer3INS_6yuv411EEE]+0x28): référence indéfinie vers « typeinfo for CVD::DV3::RawDVBuffer3 » VideoSource_Linux_DV.o:(.rodata._ZTCN3CVD9DVBuffer3INS_6yuv411EEE16_NS_3DV312RawDVBuffer3E[_ZTVN3CVD9DVBuffer3INS_6yuv411EEE]+0x48): référence indéfinie vers « typeinfo for CVD::DV3::RawDVBuffer3 » VideoSource_Linux_DV.o:(.rodata._ZTCN3CVD9DVBuffer3INS_6yuv411EEE16_NS_3DV312RawDVBuffer3E[_ZTVN3CVD9DVBuffer3INS_6yuv411EEE]+0x58): référence indéfinie vers « CVD::DV3::RawDVBuffer3::~RawDVBuffer3() » VideoSource_Linux_DV.o:(.rodata._ZTCN3CVD9DVBuffer3INS_6yuv411EEE16_NS_3DV312RawDVBuffer3E[_ZTVN3CVD9DVBuffer3INS_6yuv411EEE]+0x60): référence indéfinie vers « CVD::DV3::RawDVBuffer3::~RawDVBuffer3() » VideoSource_Linux_DV.o:(.rodata._ZTCN3CVD9DVBuffer3INS_6yuv411EEE16_NS_3DV312RawDVBuffer3E[_ZTVN3CVD9DVBuffer3INS_6yuv411EEE]+0x70): référence indéfinie vers « CVD::DV3::RawDVBuffer3::frame_pending() » VideoSource_Linux_DV.o:(.rodata._ZTCN3CVD9DVBuffer3INS_6yuv411EEE16_NS_3DV312RawDVBuffer3E[_ZTVN3CVD9DVBuffer3INS_6yuv411EEE]+0xd0): référence indéfinie vers « typeinfo for CVD::DV3::RawDVBuffer3 » VideoSource_Linux_DV.o:(.rodata._ZTCN3CVD9DVBuffer3INS_6yuv411EEE16_NS_3DV312RawDVBuffer3E[_ZTVN3CVD9DVBuffer3INS_6yuv411EEE]+0xe0): référence indéfinie vers « virtual thunk to CVD::DV3::RawDVBuffer3::~RawDVBuffer3() » VideoSource_Linux_DV.o:(.rodata._ZTCN3CVD9DVBuffer3INS_6yuv411EEE16_NS_3DV312RawDVBuffer3E[_ZTVN3CVD9DVBuffer3INS_6yuv411EEE]+0xe8): référence indéfinie vers « virtual thunk to CVD::DV3::RawDVBuffer3::~RawDVBuffer3() » VideoSource_Linux_DV.o:(.rodata._ZTCN3CVD9DVBuffer3INS_6yuv411EEE16_NS_3DV312RawDVBuffer3E[_ZTVN3CVD9DVBuffer3INS_6yuv411EEE]+0xf8): référence indéfinie vers « virtual thunk to CVD::DV3::RawDVBuffer3::frame_pending() » collect2: error: ld returned 1 exit status make: *\ [PTAM] Erreur 1 thank you.