【发布时间】:2020-09-17 18:17:31
【问题描述】:
我无法让 opencv 在 C++ 代码中工作。 我已经阅读了所有类似的问题,但还没有编译我的代码。
我从源代码安装了 OpenCV,并包含了 -D OPENCV_GENERATE_PKGCONFIG=ON 选项,我正在尝试让一个简单的 OpenCV 示例正常工作。
代码如下:
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
using namespace cv;
int main()
{
std::string image_path = "/data/000001.jpg";
Mat img = imread(image_path, IMREAD_COLOR);
if(img.empty())
{
std::cout << "Could not read the image: " << image_path << std::endl;
return 1;
}
imshow("Display window", img);
int k = waitKey(0); // Wait for a keystroke in the window
if(k == 's')
{
imwrite("starry_night.png", img);
}
return 0;
}
尝试编译:$/usr/bin/g++ -g pkg-config --cflags --libs opencv main.cpp
导致所有 OpenCV 调用出现“未定义的引用”错误:
/code/cpp/play/main.cpp:9: 未定义引用 `cv::imread(cv::String const&, int)'
运行 pkg-config --cflags --libs opencv 返回:
pkg-config --cflags --libs opencv -I/usr/local/include/opencv -I/usr/local/include -L/usr/local/lib -lopencv_stitching -vlopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_viz -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgproc -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_flann -lopencv_xphoto -lopencv_imgproc -lopencv_core
我还尝试使用此文件通过 cmake 构建代码:
set(CMAKE_VERBOSE_MAKEFILE ON)
cmake_minimum_required(VERSION 3.16)
project(play)
set(CMAKE_CXX_STANDARD 14)
find_package(OpenCV REQUIRED)
message(STATUS "OpenCV_INCLUDE_DIRS = ${OpenCV_INCLUDE_DIRS}")
message(STATUS "OpenCV_LIBS = ${OpenCV_LIBS}")
add_executable(play main.cpp)
这就是 OpenCV_LIB 的样子吗?应该有路吗?
-- OpenCV_INCLUDE_DIRS = /usr/include;/usr/include/opencv
-- OpenCV_LIBS = opencv_calib3d;opencv_core;opencv_features2d;opencv_flann;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_shape;opencv_stitching;opencv_superres;opencv_video;opencv_videoio;opencv_videostab;opencv_viz;opencv_aruco;opencv_bgsegm;opencv_bioinspired;opencv_ccalib;opencv_datasets;opencv_dpm;opencv_face;opencv_freetype;opencv_fuzzy;opencv_hdf;opencv_line_descriptor;opencv_optflow;opencv_phase_unwrapping;opencv_plot;opencv_reg;opencv_rgbd;opencv_saliency;opencv_stereo;opencv_structured_light;opencv_surface_matching;opencv_text;opencv_ximgproc;opencv_xobjdetect;opencv_xphoto
-- Configuring done
感谢您的帮助。
【问题讨论】:
-
你试过
g++ `pkg-config --cflags opencv` -g main.cpp `pkg-config --libs opencv`吗?我认为链接顺序很重要。 -
你确定opencv安装正确吗?你能检查一下这个命令输出
pkg-config --modversion opencv。您的编译命令似乎没问题