使用Opencv: BlobDetector时未定义的引用错误
Undefined reference error while using Opencv: BlobDetector
当我尝试使用opencv编译我的程序来检测blobs时,我得到以下错误:
11:47:34 **** Incremental Build of configuration Debug for project testOpencv
Info: Internal Builder is used for build
g++ "-IC:\Development\opencv\build\include" -O0 -g3 -Wall -c -fmessage- length=0 -o "src\testOpencv.o" "..\src\testOpencv.cpp"
g++ "-LC:\Development\opencv\MINGW\x86\bin" -o testOpencv.exe "src\testOpencv.o" -llibopencv_calib3d2410 -llibopencv_contrib2410 - llibopencv_core2410 -llibopencv_flann2410 -llibopencv_gpu2410 - llibopencv_highgui2410 -llibopencv_imgproc2410 -llibopencv_ml2410 - llibopencv_legacy2410 -llibopencv_nonfree2410 -llibopencv_objdetect2410 - llibopencv_ocl2410 -llibopencv_photo2410 -llibopencv_stitching2410 - llibopencv_superres2410 -llibopencv_video2410 -llibopencv_videostab2410 - lopencv_ffmpeg2410 -llibopencv_ml2410
srctestOpencv.o: In function `main':
C:DevelopmentWorkspacetestOpencvDebug/../src/testOpencv.cpp:98: undefined reference to `cv::SimpleBlobDetector::Params::Params()'
C:DevelopmentWorkspacetestOpencvDebug/../src/testOpencv.cpp:110: undefined reference to `cv::SimpleBlobDetector::SimpleBlobDetector(cv::SimpleBlobDetector::Params const&)'
C:DevelopmentWorkspacetestOpencvDebug/../src/testOpencv.cpp:113: undefined reference to `cv::FeatureDetector::detect(cv::Mat const&, std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> >&, cv::Mat const&) const'
C:DevelopmentWorkspacetestOpencvDebug/../src/testOpencv.cpp:117: undefined reference to `cv::drawKeypoints(cv::Mat const&, std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> > const&, cv::Mat&, cv::Scalar_<double> const&, int)'
srctestOpencv.o: In function `ZN2cv18SimpleBlobDetectorD1Ev':
C:/Development/opencv/build/include/opencv2/features2d/features2d.hpp:615: undefined reference to `vtable for cv::SimpleBlobDetector'
C:/Development/opencv/build/include/opencv2/features2d/features2d.hpp:615:undefined reference to `vtable for cv::SimpleBlobDetector'
C:/Development/opencv/build/include/opencv2/features2d/features2d.hpp:615:undefined reference to `VTT for cv::SimpleBlobDetector'
C:/Development/opencv/build/include/opencv2/features2d/features2d.hpp:615: undefined reference to `cv::FeatureDetector::~FeatureDetector()'collect2.exe: error: ld returned 1 exit status
11:47:38 Build Finished (took 4s.111ms) >
我在Eclipse中编译,windows 7 - 64位,我尝试按照相反的顺序包括这个链接中的库- OpenCV未定义的引用。下面是我的include文件-
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv/cv.h"
#include "opencv/highgui.h"
#include <iostream>
string imageName("image/Picture7.jpg");
if( argc > 1)
{
imageName = argv[1];
}
Mat image,grey_image, src;
src = imread("image/lena512color.jpg");
image = imread(imageName.c_str(), IMREAD_COLOR);
//resizing to make it a normal size
resize(image, image, src.size());
namedWindow( "Display window", WINDOW_AUTOSIZE );
imshow( "Display window", image );
// to display the image in greyscale
cvtColor(image, grey_image, CV_RGB2GRAY);//CV_BGR2GRAY);
imwrite( "savedImage/Gray_image.jpg", grey_image );
namedWindow("Gray window", WINDOW_AUTOSIZE);
imshow("Gray window", grey_image);
// Reduce the noise so we avoid false circle detection
GaussianBlur( grey_image, grey_image, Size(9, 9), 2, 2 );
SimpleBlobDetector::Params params;
params.maxThreshold= 200;
params.minThreshold = 10;
params.filterByArea= true;
params.minArea = 1500;
params.filterByCircularity= true;
params.minCircularity = 0.1;
params.filterByConvexity= true;
params.minConvexity = 0.87;
params.filterByInertia= true;
params.minInertiaRatio= 0.01;
SimpleBlobDetector detector(params);
vector<KeyPoint> keypoints;
detector.detect(grey_image, keypoints);
//Draw detected blobs as red circles
Mat blob_circles;
drawKeypoints(grey_image, keypoints, blob_circles,Scalar(0,0,255), DrawMatchesFlags:: DRAW_RICH_KEYPOINTS);
imshow("Keypoints", blob_circles);
waitKey(0);
return 0;
}
如何避免这些错误?
在您的链接器选项中:根据您的opencv
版本的名称添加-llibopencv_feature2d2410.lib
, -llibopencv_objdetect2410.lib
lib的路径似乎不正确:
"-LC:\Development\opencv\MINGW\x86\bin"
应为"-LC:\Development\opencv\MINGW\x86\lib"
相关文章:
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++引用错误
- 已定义函数时出现 G++ "未定义的引用"错误
- 链接 cmake 时出现未定义的引用错误
- 只有级联分类器会发出未定义的引用错误
- 2个模板化类的非模板友元函数未定义引用错误
- C/C++ 取消引用错误:在空检查之前取消引用
- 为什么我的C++代码无法编译,出现未定义的引用错误
- 我的代码中C++未定义的引用错误?
- 模板专用化会导致未定义的引用错误
- .cpp文件中未定义的引用错误
- c++ 中目录中文件的未定义引用错误
- Opencv4 使用 pkg-config 给出未定义的引用错误
- 使用Cygwin C++时出现未定义的引用错误,为什么我的文件没有链接?
- 共享指针取消引用错误
- 编译简单的多文件类程序时出现未定义的引用错误
- 模板函数产生未定义的引用错误
- 调用提取重加载器会产生对"运算符"的未定义引用错误>>
- 如何修复"未定义的引用"错误 opencv 和 g++
- 未定义的引用错误,我该怎么办?