我已经将OpenCV 3.3.0安装到Ubuntu 16.04。只想编译此代码。
#include <iostream>
using namespace std;
#include "opencv2/opencv.hpp"
#include "opencv2/gpu/gpu.hpp"
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <cmath>
using namespace cv;
int main(int argc, char* argv[])
{
try
{
int kernel_size = 3;
cv::Mat src_host = cv::imread("crack2.jpg");
cv::Mat gray_img, avg, kernel;
cv::gpu::GpuMat dst, src;
src.upload(src_host);
cv::gpu::threshold(src, dst, 128.0, 255.0, CV_THRESH_BINARY);
cv::Mat result_host;
dst.download(result_host);
std::cout<< "Done!!!" <<std::endl;
}catch(const cv::Exception& ex)
{
std::cout<<"Error: " << ex.what() << std::endl;
}
return 0;
}
g ++ -o main gpu_thresh.cpp'pkg-config opencv --cflags --libs'-lopencv_gpu -lopencv_core
g ++ -L / usr / local / lib -o main gpu_thresh.cpp'pkg-config opencv --cflags --libs'-lopencv_gpu -lopencv_core
我试图用这些方法编译它,但仍然给出相同的警告和错误。
/ usr / bin / ld:警告:libopencv_core.so.2.4,需要 /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libopencv_gpu.so, 可能与libopencv_core.so.3.3 / usr / bin / ld:/tmp/ccdhLGL0.o冲突: 未定义引用符号'_ZN2cv3gpu6GpuMat7releaseEv' //usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4:添加错误 符号:命令行collect2中缺少DSO:错误:ld返回1 退出状态
我该怎么办?
答案 0 :(得分:1)
OpenCV 3.3中没有opencv2/gpu/gpu.hpp
。如果您的代码编译,则意味着您的计算机上同时包含OpenCV 2.4和3.3。
在OpenCV 3.3中,包括:
#include <opencv2/core/cuda.hpp>
然后使用
cv::cuda::GpuMat img;
详见here。
编辑:我刚刚注意到您的编译方法。使用pkg-config opencv --cflags --libs
时,您不再需要手动添加libopencv文件。
只需:g++ -o main gpu_thresh.cpp 'pkg-config opencv --cflags --libs'