我正在尝试使用C ++在Ubuntu 16.04上设置OpenCV。我设法使该程序与默认的OpenCV模块一起使用,但是在扩展模块方面遇到了困难。例如,我想使用以下代码生成超级像素:
#include <opencv2/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/ximgproc/slic.hpp>
#include <opencv2/core/cvstd.hpp>
#include <opencv2/ximgproc.hpp>
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <vector>
#include <float.h>
using namespace std;
using namespace cv;
int main( int argc, char* argv[] ) {
Mat *image;
*image = imread("shoe.jpg" , cv::IMREAD_COLOR);
Ptr<ximgproc::SuperpixelSLIC> ptr =
ximgproc::createSuperpixelSLIC(*image,100,10, 10.0f);
}
当我用这一行编译时:
g++ -std=c++11 main.cpp -o output `pkg-config --cflags --libs opencv`
我收到以下错误:
/tmp/ccnStIaV.o: In function `main':
main.cpp:(.text+0x187): undefined reference to `cv::ximgproc::createSuperpixelSLIC(cv::_InputArray const&, int, int, float)'
collect2: error: ld returned 1 exit status
我认为这是我的pkgconfigs文件中的opencv.pc文件存在问题。由于某些原因,当我构建扩展模块时,opencv.pc文件不会被修改为包括ximgproc和其他模块。运行pkg-config --libs opencv
命令时,列出的库与仅安装基本版本的OpenCV时列出的库相同:
/usr/lib/x86_64-linux-gnu/libopencv_calib3d.so -lopencv_calib3d /usr/lib/x86_64-linux-gnu/libopencv_contrib.so -lopencv_contrib /usr/lib/x86_64-linux-gnu/libopencv_core.so -lopencv_core /usr/lib/x86_64-linux-gnu/libopencv_features2d.so -lopencv_features2d /usr/lib/x86_64-linux-gnu/libopencv_flann.so -lopencv_flann /usr/lib/x86_64-linux-gnu/libopencv_gpu.so -lopencv_gpu /usr/lib/x86_64-linux-gnu/libopencv_highgui.so -lopencv_highgui /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so -lopencv_imgproc /usr/lib/x86_64-linux-gnu/libopencv_legacy.so -lopencv_legacy /usr/lib/x86_64-linux-gnu/libopencv_ml.so -lopencv_ml /usr/lib/x86_64-linux-gnu/libopencv_objdetect.so -lopencv_objdetect /usr/lib/x86_64-linux-gnu/libopencv_ocl.so -lopencv_ocl /usr/lib/x86_64-linux-gnu/libopencv_photo.so -lopencv_photo /usr/lib/x86_64-linux-gnu/libopencv_stitching.so -lopencv_stitching /usr/lib/x86_64-linux-gnu/libopencv_superres.so -lopencv_superres /usr/lib/x86_64-linux-gnu/libopencv_ts.so -lopencv_ts /usr/lib/x86_64-linux-gnu/libopencv_video.so -lopencv_video /usr/lib/x86_64-linux-gnu/libopencv_videostab.so -lopencv_videostab
我想我可以进入opencv.pc文件并手动添加所有扩展模块路径,但是没有自动完成这一事实对我来说表明我在安装过程中做错了什么。
对于这个问题,我将不胜感激。在过去的几天里,我一直坚持这种设置,很想开始图像处理:)
答案 0 :(得分:0)
对不起,人们在灌输过程中犯了一个愚蠢的错误。
我忘记确保扩展模块的版本与基本OpenCV库的版本相同。确保它们是相同的版本。
作为参考,如果要从Github存储库构建,则必须在opencv和opencv_contrib中都运行git checkout x.x.x
。两个“ x.x.x”必须相同。