ubuntu
下载及编译
使用opencv3.4.2版本。尝试了4.3.0,没有编译成功,没有继续研究了。
opencv-3.4.2下载地址
opencv_contrib-3.4.2下载地址
解压,假设都解压到~/opencv/目录下。
cd ~/opencv/opencv-3.4.2
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_CUDA=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D WITH_CUBLAS=1 \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.4.2/modules \
-D BUILD_EXAMPLES=ON \
-DBUILD_opencv_cudacodec=OFF ..
make -j 4 #量力而行
sudo make install
sudo ldconfig
遇到的问题
fatal error: opencv2/xfeatures2d/cuda.hpp: No such file or directory
解决方法:
直接在报错的地方修改源代码,要改两个地方
文件位置:~/opencv/opencv-3.4.2/modules/stitching/include/opencv2/stitching/detail/matchers.hpp
/home/qinrui/opencv/opencv-3.4.2/samples/gpu/surf_keypoint_matcher.cpp
//matchers.hpp
#ifdef HAVE_OPENCV_XFEATURES2D
//# include "opencv2/xfeatures2d/cuda.hpp"
# include "/home/qinrui/opencv/opencv_contrib-3.4.2/modules/xfeatures2d/include/opencv2/xfeatures2d/cuda.hpp"
#endif
//surf_keypoint_matcher.cpp
//#include "opencv2/xfeatures2d/cuda.hpp"
#include "/home/qinrui/opencv/opencv_contrib-3.4.2/modules/xfeatures2d/include/opencv2/xfeatures2d/cuda.hpp"
找不到boostdesc_bgm
等一系列文件
在cmake的时候会下载,但国内访问github很慢,容易下载失败,所以手动下载,再将文件放到~/opencv/opencv_contrib-3.4.2/modules/xfeatures2d/src
目录中。
可以直接用我整理好的,点击下载
undefined reference to
cv::cuda::SURF_CUDA::SURF_CUDA()`
缺少了链接。修改<build_dir>/samples/gpu/CMakeFiles/example_gpu_surf_keypoint_matcher.dir/link.txt
,添加两个链接
CMakeFiles/example_gpu_surf_keypoint_matcher.dir/surf_keypoint_matcher.cpp.o
../../modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/surf.cuda.cpp.o
../../modules/xfeatures2d/CMakeFiles/cuda_compile.dir/src/cuda/cuda_compile_generated_surf.cu.o ……
测试代码
通过一个简单的例子,测试opencv with cuda是否安装成功。
#include <iostream>
#include "opencv2/opencv.hpp"
int main(int argc, char *argv[])
{
//Read Two Images
cv::Mat h_img1 = cv::imread("images/cameraman.tif");
cv::Mat h_img2 = cv::imread("images/circles.png");
//Create Memory for storing Images on device
cv::cuda::GpuMat d_result1, d_img1, d_img2;
cv::Mat h_result1;
//Upload Images to device
d_img1.upload(h_img1);
d_img2.upload(h_img2);
cv::cuda::add(d_img1, d_img2, d_result1);
//Download Result back to host
d_result1.download(h_result1);
cv::imshow("Image1 ", h_img1);
cv::imshow("Image2 ", h_img2);
cv::imshow("Result addition ", h_result1);
cv::imwrite("images/result_add.png", h_result1);
cv::waitKey();
return 0;
}
编译命令:
g++ -std=c++11 test.cpp `pkg-config opencv --libs --cflags` -o image_read
./image_read
windows 10
之前写的文章丢了,下面这份是老版本的,不想重写了,随便看看吧。
源码下载
将源码进行解压,例解压至E:\opencv\opencv-4.3.0
使用cmake和vs编译源码
在cmake中设置好源码路径和build路径,点击configure。
configure完成后,找到OPENCV_EXTRA_MODULES_PATH,将value设置为opencv_contrib\modules路径。重新configure一次。
勾选cuda相关选项,点击generate。此时build目录下会产生OpenCV.sln,使用vs打开。
在解决方案中,选择cmakeTargets->build All,右键生成。注意debug和release版本。
编译生成的文件在build/install目录下。