OpenCV Fehler
-
Hi Leute,
Ich wollte mal ein bisschen mit OpenCV 2.4.0 unter C++ rumprobieren. Also OpenCV nach "C:\Program Files\OpenCV" entpackt und mehr nicht(vielleicht steckt hier ja schon der Fehler). Nun wollte ich das Programm C++ Beispielprogramm "camshiftdemo.cpp" (Code:)#include "opencv2/video/tracking.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include <iostream> #include <ctype.h> using namespace cv; using namespace std; Mat image; bool backprojMode = false; bool selectObject = false; int trackObject = 0; bool showHist = true; Point origin; Rect selection; int vmin = 10, vmax = 256, smin = 30; void onMouse( int event, int x, int y, int, void* ) { if( selectObject ) { selection.x = MIN(x, origin.x); selection.y = MIN(y, origin.y); selection.width = std::abs(x - origin.x); selection.height = std::abs(y - origin.y); selection &= Rect(0, 0, image.cols, image.rows); } switch( event ) { case CV_EVENT_LBUTTONDOWN: origin = Point(x,y); selection = Rect(x,y,0,0); selectObject = true; break; case CV_EVENT_LBUTTONUP: selectObject = false; if( selection.width > 0 && selection.height > 0 ) trackObject = -1; break; } } void help() { cout << "\nThis is a demo that shows mean-shift based tracking\n" "You select a color objects such as your face and it tracks it.\n" "This reads from video camera (0 by default, or the camera number the user enters\n" "Usage: \n" " ./camshiftdemo [camera number]\n"; cout << "\n\nHot keys: \n" "\tESC - quit the program\n" "\tc - stop the tracking\n" "\tb - switch to/from backprojection view\n" "\th - show/hide object histogram\n" "\tp - pause video\n" "To initialize tracking, select the object with mouse\n"; } const char* keys = { "{1| | 0 | camera number}" }; int main( int argc, const char** argv ) { help(); VideoCapture cap; Rect trackWindow; RotatedRect trackBox; int hsize = 16; float hranges[] = {0,180}; const float* phranges = hranges; CommandLineParser parser(argc, argv, keys); int camNum = parser.get<int>("1"); cap.open(camNum); if( !cap.isOpened() ) { help(); cout << "***Could not initialize capturing...***\n"; cout << "Current parameter's value: \n"; parser.printParams(); return -1; } namedWindow( "Histogram", 0 ); namedWindow( "CamShift Demo", 0 ); setMouseCallback( "CamShift Demo", onMouse, 0 ); createTrackbar( "Vmin", "CamShift Demo", &vmin, 256, 0 ); createTrackbar( "Vmax", "CamShift Demo", &vmax, 256, 0 ); createTrackbar( "Smin", "CamShift Demo", &smin, 256, 0 ); Mat frame, hsv, hue, mask, hist, histimg = Mat::zeros(200, 320, CV_8UC3), backproj; bool paused = false; for(;;) { if( !paused ) { cap >> frame; if( frame.empty() ) break; } frame.copyTo(image); if( !paused ) { cvtColor(image, hsv, CV_BGR2HSV); if( trackObject ) { int _vmin = vmin, _vmax = vmax; inRange(hsv, Scalar(0, smin, MIN(_vmin,_vmax)), Scalar(180, 256, MAX(_vmin, _vmax)), mask); int ch[] = {0, 0}; hue.create(hsv.size(), hsv.depth()); mixChannels(&hsv, 1, &hue, 1, ch, 1); if( trackObject < 0 ) { Mat roi(hue, selection), maskroi(mask, selection); calcHist(&roi, 1, 0, maskroi, hist, 1, &hsize, &phranges); normalize(hist, hist, 0, 255, CV_MINMAX); trackWindow = selection; trackObject = 1; histimg = Scalar::all(0); int binW = histimg.cols / hsize; Mat buf(1, hsize, CV_8UC3); for( int i = 0; i < hsize; i++ ) buf.at<Vec3b>(i) = Vec3b(saturate_cast<uchar>(i*180./hsize), 255, 255); cvtColor(buf, buf, CV_HSV2BGR); for( int i = 0; i < hsize; i++ ) { int val = saturate_cast<int>(hist.at<float>(i)*histimg.rows/255); rectangle( histimg, Point(i*binW,histimg.rows), Point((i+1)*binW,histimg.rows - val), Scalar(buf.at<Vec3b>(i)), -1, 8 ); } } calcBackProject(&hue, 1, 0, hist, backproj, &phranges); backproj &= mask; RotatedRect trackBox = CamShift(backproj, trackWindow, TermCriteria( CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1 )); if( trackWindow.area() <= 1 ) { int cols = backproj.cols, rows = backproj.rows, r = (MIN(cols, rows) + 5)/6; trackWindow = Rect(trackWindow.x - r, trackWindow.y - r, trackWindow.x + r, trackWindow.y + r) & Rect(0, 0, cols, rows); } if( backprojMode ) cvtColor( backproj, image, CV_GRAY2BGR ); ellipse( image, trackBox, Scalar(0,0,255), 3, CV_AA ); } } else if( trackObject < 0 ) paused = false; if( selectObject && selection.width > 0 && selection.height > 0 ) { Mat roi(image, selection); bitwise_not(roi, roi); } imshow( "CamShift Demo", image ); imshow( "Histogram", histimg ); char c = (char)waitKey(10); if( c == 27 ) break; switch(c) { case 'b': backprojMode = !backprojMode; break; case 'c': trackObject = 0; histimg = Scalar::all(0); break; case 'h': showHist = !showHist; if( !showHist ) destroyWindow( "Histogram" ); else namedWindow( "Histogram", 1 ); break; case 'p': paused = !paused; break; default: ; } } return 0; }
testen, da mich hauptsächlich Bewegungserkennung(Webcam) usw. interessiert. Ich versuche das ganze mit MinGW zu kompilieren(Code:)
SET BINDIR=%~dp0 CD /D "%BINDIR%" g++ camshiftdemo.cpp -I "C:\Program Files\OpenCV\build\include" -L "C:\Program Files\OpenCV\build\x86\mingw\lib" pause
aber ich erhalte die Fehlermeldung:
C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x6f): und efined reference to `cv::noArray()' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x83): und efined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x95): und efined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xa7): und efined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xc4): und efined reference to `cv::bitwise_and(cv::_InputArray const&, cv::_InputArray con st&, cv::_OutputArray const&, cv::_InputArray const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x28f): un defined reference to `cv::VideoCapture::VideoCapture()' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x2fb): un defined reference to `cv::CommandLineParser::CommandLineParser(int, char const* const*, char const*)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x37d): un defined reference to `cv::VideoCapture::open(int)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x38b): un defined reference to `cv::VideoCapture::isOpened() const' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x3cd): un defined reference to `cv::CommandLineParser::printParams()' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x41b): un defined reference to `cv::namedWindow(std::string const&, int)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x47b): un defined reference to `cv::namedWindow(std::string const&, int)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x4e3): un defined reference to `cv::setMouseCallback(std::string const&, void (*)(int, int , int, int, void*), void*)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x593): un defined reference to `cv::createTrackbar(std::string const&, std::string const&, int*, int, void (*)(int, void*), void*)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x65f): un defined reference to `cv::createTrackbar(std::string const&, std::string const&, int*, int, void (*)(int, void*), void*)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x72b): un defined reference to `cv::createTrackbar(std::string const&, std::string const&, int*, int, void (*)(int, void*), void*)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x7cf): un defined reference to `cv::Mat::zeros(int, int, int)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x81d): un defined reference to `vtable for cv::VideoCapture' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x85e): un defined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x876): un defined reference to `cv::Mat::copyTo(cv::_OutputArray const&) const' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x89c): un defined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x8b2): un defined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x8da): un defined reference to `cv::cvtColor(cv::_InputArray const&, cv::_OutputArray cons t&, int, int)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x90f): un defined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xa0c): un defined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xa38): un defined reference to `cv::inRange(cv::_InputArray const&, cv::_InputArray const& , cv::_InputArray const&, cv::_OutputArray const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xad0): un defined reference to `cv::mixChannels(cv::Mat const*, unsigned int, cv::Mat*, un signed int, int const*, unsigned int)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xafd): un defined reference to `cv::Mat::Mat(cv::Mat const&, cv::Rect_<int> const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xb1d): un defined reference to `cv::Mat::Mat(cv::Mat const&, cv::Rect_<int> const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xb35): un defined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xb4d): un defined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xbab): un defined reference to `cv::calcHist(cv::Mat const*, int, int const*, cv::_InputAr ray const&, cv::_OutputArray const&, int, int const*, float const**, bool, bool) ' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xbb0): un defined reference to `cv::noArray()' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xbca): un defined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xbe2): un defined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xc32): un defined reference to `cv::normalize(cv::_InputArray const&, cv::_OutputArray con st&, double, double, int, int, cv::_InputArray const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xc8d): un defined reference to `cv::Mat::operator=(cv::Scalar_<double> const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xd7f): un defined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xd97): un defined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xdbf): un defined reference to `cv::cvtColor(cv::_InputArray const&, cv::_OutputArray cons t&, int, int)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xedb): un defined reference to `cv::rectangle(cv::Mat&, cv::Point_<int>, cv::Point_<int>, cv::Scalar_<double> const&, int, int, int)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xf34): un defined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xf4c): un defined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0xfa2): un defined reference to `cv::calcBackProject(cv::Mat const*, int, int const*, cv::_ InputArray const&, cv::_OutputArray const&, float const**, double, bool)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x1002): u ndefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x1047): u ndefined reference to `cv::CamShift(cv::_InputArray const&, cv::Rect_<int>&, cv: :TermCriteria)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x1189): u ndefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x11a1): u ndefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x11c9): u ndefined reference to `cv::cvtColor(cv::_InputArray const&, cv::_OutputArray con st&, int, int)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x124f): u ndefined reference to `cv::ellipse(cv::Mat&, cv::RotatedRect const&, cv::Scalar_ <double> const&, int, int)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x129f): u ndefined reference to `cv::Mat::Mat(cv::Mat const&, cv::Rect_<int> const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x12a4): u ndefined reference to `cv::noArray()' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x12be): u ndefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x12d6): u ndefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x12f2): u ndefined reference to `cv::bitwise_not(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x1316): u ndefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x135c): u ndefined reference to `cv::imshow(std::string const&, cv::_InputArray const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x1390): u ndefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x13ca): u ndefined reference to `cv::imshow(std::string const&, cv::_InputArray const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x13ec): u ndefined reference to `cv::waitKey(int)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x1475): u ndefined reference to `cv::Mat::operator=(cv::Scalar_<double> const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x14c3): u ndefined reference to `cv::destroyWindow(std::string const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x1513): u ndefined reference to `cv::namedWindow(std::string const&, int)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x15bc): u ndefined reference to `cv::VideoCapture::~VideoCapture()' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text+0x18bc): u ndefined reference to `cv::VideoCapture::~VideoCapture()' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text$_ZN2cv3Mat D1Ev[cv::Mat::~Mat()]+0x2b): undefined reference to `cv::fastFree(void*)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text$_ZN2cv3Mat 6createEiii[cv::Mat::create(int, int, int)]+0x7b): undefined reference to `cv::M at::create(int, int const*, int)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text$_ZN2cv3Mat 7releaseEv[cv::Mat::release()]+0x3c): undefined reference to `cv::Mat::deallocat e()' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text$_ZN2cv11_I nputArrayC1ERKNS_7Scalar_IdEE[cv::_InputArray::_InputArray(cv::Scalar_<double> c onst&)]+0xb): undefined reference to `vtable for cv::_InputArray' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text$_ZN2cv17Co mmandLineParser3getIiEET_RKSsb[int cv::CommandLineParser::get<int>(std::basic_st ring<char, std::char_traits<char>, std::allocator<char> > const&, bool)]+0x1b): undefined reference to `cv::CommandLineParser::has(std::string const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text$_ZN2cv17Co mmandLineParser3getIiEET_RKSsb[int cv::CommandLineParser::get<int>(std::basic_st ring<char, std::char_traits<char>, std::allocator<char> > const&, bool)]+0x42): undefined reference to `cv::CommandLineParser::getString(std::string const&)' C:\Users\Marces\AppData\Local\Temp\ccbFXKev.o:camshiftdemo.cpp:(.text$_ZN2cv17Co mmandLineParser3getIiEET_RKSsb[int cv::CommandLineParser::get<int>(std::basic_st ring<char, std::char_traits<char>, std::allocator<char> > const&, bool)]+0x5f): undefined reference to `int cv::CommandLineParser::analyzeValue<int>(std::string const&, bool)' collect2: ld returned 1 exit status
Danke schon mal im Voraus
MfG DragonRaider5
-
Du musst die libs schon mit dranlinken und nicht nur das Lib-Verzeichnis angeben.
http://opencv.willowgarage.com/wiki/InstallGuide
g++ -o my_example my_example.cpp -lopencv_core -lopencv_imgproc -lopencv_calib3d -lopencv_video -lopencv_features2d -lopencv_ml -lopencv_highgui -lopencv_objdetect -lopencv_contrib -lopencv_legacy