2013-04-07 58 views
5

Tôi đang cố gắng để biên dịch các ví dụ đơn giản tại http://mateuszstankiewicz.eu/?p=189 Tôi đang chạy Ubuntu 12.10 64 bits.I sử dụng OpenCV 2.4.4aBackgroundSubtractorMOG2 & OpenCV

tôi biên dịch sử dụng một makefile mà thực hiện điều này:

g++ background_subtraction.cpp -o background_subtraction -I/usr/local/include/opencv -I/usr/local/include/opencv2 -L /usr/local/lib -lm -lopencv_core -lopencv_highgui -lopencv_imgproc -lcvblob 

Các lỗi:

/tmp/cc0ZWnll.o: dans la fonction « main »: 
background_subtraction.cpp:(.text+0x96): référence indéfinie vers « cv::BackgroundSubtractorMOG2::BackgroundSubtractorMOG2() » 
background_subtraction.cpp:(.text+0x1f0): référence indéfinie vers « cv::BackgroundSubtractorMOG2::operator()(cv::_InputArray const&, cv::_OutputArray const&, double) » 
background_subtraction.cpp:(.text+0x222): référence indéfinie vers « cv::BackgroundSubtractorMOG2::getBackgroundImage(cv::_OutputArray const&) const » 
background_subtraction.cpp:(.text+0x61a): référence indéfinie vers « cv::BackgroundSubtractorMOG2::~BackgroundSubtractorMOG2() » 
background_subtraction.cpp:(.text+0x7a6): référence indéfinie vers « cv::BackgroundSubtractorMOG2::~BackgroundSubtractorMOG2() » 
collect2: erreur: ld a retourné 1 code d'état d'exécution 

Phương tiện: tài liệu tham khảo không xác định để ...

Tệp background_subtraction.cpp:

#include <opencv2/opencv.hpp> 

#include <iostream> 
#include <vector> 

int 
main (int argc, char *argv[]) 
{ 
    cv::Mat frame; 
    cv::Mat back; 
    cv::Mat fore; 
    cv::VideoCapture cap (0); 
    cv::BackgroundSubtractorMOG2 bg; 
    bg.set ("nmixtures", 3); 
    //bg.bShadowDetection = false; 
    std::vector < std::vector <cv::Point> >contours; 

    cv::namedWindow ("Frame"); 
    cv::namedWindow ("Background"); 

    for (;;) 
    { 
     cap >> frame; 
     bg.operator()(frame, fore); 
     bg.getBackgroundImage (back); 
     cv::erode (fore, fore, cv::Mat()); 
     cv::dilate (fore, fore, cv::Mat()); 
     cv::findContours (fore, contours, CV_RETR_EXTERNAL, 
      CV_CHAIN_APPROX_NONE); 
     cv::drawContours (frame, contours, -1, cv::Scalar (0, 0, 255), 2); 
     cv::imshow ("Frame", frame); 
     cv::imshow ("Background", back); 
     if (cv::waitKey (30) >= 0) 
    break; 
    } 
    return 0; 
} 

Tôi thiếu gì để biên dịch chương trình này thành công? Cảm ơn :)

Trả lời

9

Bạn cũng cần phải liên kết opencv_video

+2

Giải quyết vấn đề, tôi vừa thêm "-lopencv_video" vào makefile :) –

-2

nếu bạn đang sử dụng Microsoft Visual chỉ cần thêm "opencv_video244.lib" trong

Properties-> Linker-> Input-> phụ thuộc thêm

+0

Làm cách nào để tăng thêm tính hữu dụng hơn so với những gì đã thấy trước đây? Điều này gần như nguyên văn so với các câu trả lời khác được thấy ở đây. – rayryeng

0

Thêm các dòng mã này. sau đó nó sẽ hoạt động./

int const mixture = 2; 
    const bool bShadowDetection = false; 
    cv::BackgroundSubtractorMOG2 bg(mixture, bShadowDetection);