c++ openCV 3.1 - 不能像教程中那样使用 Mat 或大多数 openCV 东西

c++ openCV 3.1 - can't use Mat or most of the openCV things like in the tutorials

最佳

我正在尝试用 C++ 创建一个项目,该项目大部分时间都在 open-cv 库

因此,我在 windows 机器上安装了 open-cv3.1.0 并连接了 libraryinclude map/files 到我的 netbeans c++ 项目。


成功

总的来说,我认为我已经成功地做到了这一点,因为 当我 编译/运行 包含下一段代码的应用程序时,我没有收到任何错误。

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;

++ 我可以读入图像并将其可视化:)

CvMat *img = cvLoadImageM(location.c_str(),CV_LOAD_IMAGE_GRAYSCALE);
cvNamedWindow( "My Window", 1 );
cvShowImage( "My Window", img );
cvWaitKey();

问题

但是我一上随机教程。例如

// create a big 8Mb matrix
Mat A(1000, 1000, CV_64F);

http://docs.opencv.org/3.0-last-rst/modules/core/doc/intro.html

甚至

Mat A;

然后我立即得到一个编译错误:

g++     -o dist/Debug/Cygwin-Windows/ai4 build/Debug/Cygwin-Windows/PrincipalComponentAnalysis.o build/Debug/Cygwin-Windows/ReadInImage.o build/Debug/Cygwin-Windows/main.o -L../../../netbeans/OpenCV/opencv/build/x64/vc14/bin -lopencv_world310 -lopencv_world310d
build/Debug/Cygwin-Windows/PrincipalComponentAnalysis.o: In function `cv::Mat::~Mat()':
/cygdrive/d/fun/ai/ai4/../../../netbeans/OpenCV/opencv/build/include/opencv2/core/mat.inl.hpp:571: undefined reference to `cv::fastFree(void*)'
...

唯一没有给我错误的是:

CvMat A;
CvMat *B;
IplImage *C;
IplImage D;

这是因为大多数(所有)教程和 Whosebug 问题都在使用 Mat Acv::Mat A版本。


问题

因此问题是:您是否遇到过同样的问题?你愿意帮助我吗? + 我该如何解决。


编辑:配置步骤 - OpenCV 3.1

工具 --> 选项 --> c/c++ --> 代码帮助:

R-单击项目 --> 属性 --> 构建 --> C++ 编译器 --> 包含目录

R-单击项目 --> 属性 --> 构建 --> linker --> 其他库目录

R-单击项目 --> 属性 --> 构建 --> linker --> 库 --> 添加库


解决方案

  1. 下载CMake
  2. 下载 OpenCV
  3. 下载 MinGW <-- 使用它作为编译器而不是 cygwin
  4. 安装MinGW
  5. 关注这个link --> http://eyalarubas.com/opencv-installation-on-windows-netbeans-mingw.html

您在调用 cv::Mat 的析构函数时遇到问题。我曾经遇到过这个问题。这与库和程序之间的不匹配有关。例如 6432debugreleasemtmd 类似的东西。因此,您要做的第一件事就是确保构建的 OpenCV 和您的调用程序之间的所有内容都匹配。

您正在使用 cygwin 进行编译并链接到 VC14 库。

那是你的错误。 VC14 用于 MSVC14(Visual Studio 编译器),您需要自己编译 OpenCV 才能使用 cygwin。 OpenCV 不附带其他 pre-built 库。

网上有多个教程介绍如何操作,但实际上您需要使用 cmake 才能为您的特定工具链编译 OpenCV。