我也从源代码构建了OpenCV以及 opencv_contrib 。
出于某种原因,我尝试访问lineDescriptor
中的类会导致链接器错误。
所有这些声明都会引发链接器错误
BinaryDescriptor bsd = BinaryDescriptor();
Ptr<BinaryDescriptor> bsd1 = BinaryDescriptor::createBinaryDescriptor();
Ptr<LSDDetector> lsd1 = LSDDetector::createLSDDetector();
我完全理解错误的含义,但我不知道为什么它会被抛出。
我环顾四周,尝试了不同的解决方案; changing the compiler,verified linker flags和linked my libraries,但错误仍然被抛出。
#include <iostream>
#include "opencv2/opencv.hpp"
#include "opencv2/line_descriptor.hpp"
using namespace cv;
using namespace std;
using namespace line_descriptor;
void detectLines(Mat& original, Mat grey)
{
Ptr<LineSegmentDetector> lsd = createLineSegmentDetector(2);
vector<Vec4f> lines;
lsd->detect(grey, lines);
cout << "Detected " << lines.size() << endl;
lsd->drawSegments(original, lines);
// Linker problems galore
// BinaryDescriptor bsd = BinaryDescriptor();
// Ptr<BinaryDescriptor> bsd1 = BinaryDescriptor::createBinaryDescriptor();
// Ptr<LSDDetector> lsd1 = LSDDetector::createLSDDetector();
}
这些是我当前的链接器标志
-lopencv_calib3d -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videoio -lopencv_videostab
我个人觉得它与我的旗帜有关,但我不确定与lineDescriptor
对应的旗帜。任何帮助将不胜感激!
答案 0 :(得分:1)
来自README on opencv_contrib
's GitHub:
要运行,需要添加contrib模块的链接器标志,以便在代码/ IDE中使用它们。例如,要使用aruco模块,将添加“-lopencv_aruco”标志。
因此,您只需将contrib
模块line_descriptor
与标记
-lopencv_line_descriptor
这是一个thorough answer on SO,它会在安装步骤中一次性链接所有库。