背景资料;OpenCV

背景资料;OpenCV,opencv,background-subtraction,Opencv,Background Subtraction,我正在尝试编译下面的简单示例 我运行的是Ubuntu 12.10 64位,我使用的是OpenCV 2.4.4a 我使用一个makefile进行编译,该文件执行以下操作: 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_highgu

我正在尝试编译下面的简单示例 我运行的是Ubuntu 12.10 64位,我使用的是OpenCV 2.4.4a

我使用一个makefile进行编译,该文件执行以下操作:

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
错误:

/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
意思是:未定义的引用

背景_减法.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;
}
#包括
#包括
#包括
int
main(int argc,char*argv[])
{
cv::垫架;
cv::垫背;
cv::Mat-fore;
cv::视频捕获上限(0);
cv::背景:MOG2 bg;
bg.set(“nmixtures”,3);
//bg.bShadowDetection=false;
标准::矢量<标准::矢量>等高线;
cv::namedWindow(“框架”);
简历::namedWindow(“背景”);
对于(;;)
{
cap>>框架;
bg.运算符()(帧,前);
bg.getBackgroundImage(返回);
侵蚀(前,前,cv::Mat());
cv::扩张(前,前,cv::垫());
cv::findContours(前部、等高线、后部、外部、,
CV_链_约_无);
cv::drawContours(框架,轮廓,-1,cv::Scalar(0,0,255),2);
cv::imshow(“帧”,帧);
cv::imshow(“背景”,背面);
如果(cv::waitKey(30)>=0)
打破
}
返回0;
}

要成功编译这个程序,我缺少什么?谢谢:)

您还需要链接
opencv\u视频

如果您使用的是Microsoft Visual,只需在中添加“opencv\u video244.lib”


属性->链接器->输入->其他依赖项添加这些代码行。那它就行了

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

问题解决了,我刚刚在makefile中添加了“-lopencv_video:”)这比以前看到的更有用吗?与这里看到的其他答案相比,这几乎是一字不差的。