opencv(2,3,4),介绍,编译(windows&linux)

一、opencv历史

2018.11.18 opencv4.0.0发布,粗粗看了下,和3.4.x相比改动并不大。主要是dnn的完善,但是官方没用作为3.5.x而直接提升一个大版本到4.0.0,个人猜测是后续将深度学习作为库的核心方向。毕竟tensorflow这几年搞的如火如茶,在图像处理方面侵蚀了opencv不是市场。


编译的过程需要设置--番--羽--土--啬--,由于cmake默认不支持proxy,推荐使用ss+kcp+proxifier,外网文件基本秒下


二、opencv3&4 编译【windows cpu】

1. 环境

vs2013 update5 或者 vs2017 15.8

cmake-3.12

python-3.6.5(版本不要太高,tensorflow或许其它库不支持)

opencv-3.4.5 + opencv_contrib-3.4.5 或者

opencv-4.0.1 + opencv_contrib-4.0.1


2.解压opencv 到

D:\sdk\vs2017-x86\opencv-3.4.5-cpu

D:\sdk\vs2017-x86\opencv-4.0.1-cpu


3.解压opencv_contrib到

D:\sdk\vs2017-x86\opencv-3.4.5-cpu\opencv_contrib-3.4.5

D:\sdk\vs2017-x86\opencv-4.0.1-cpu\opencv_contrib-4.0.1


4.先运行程序proxifier,因为cmake不支持代理,中间下载一些文件非常慢,可以科学上网(ss+kcp)然后用proxifier转全局代理


5.然后打开cmake

最上面的两行编辑栏"where is the source code" 和 "where to build the binaries" 分别填写:

D:\sdk\vs2017-x86\opencv-3.4.5-cpu

D:\sdk\vs2017-x86\opencv-3.4.5-cpu\build

或者

D:\sdk\vs2017-x86\opencv-4.0.1-cpu

D:\sdk\vs2017-x86\opencv-4.0.1-cpu\build

点“Configure”按钮,选择“Visual Studio 12 2013”或者“Visual Studio 12 2017”,接下来会构建makefile


6.配置opencv,需要变动的项目有:

选项说明

包含cu的选项都去掉:

WITH_CUBLAS

WITH_CUDA

WITH_CUFFT

WITH_NVCUVID


去掉
BUILD_EXAMPLES
打钩
INSTALL_C_EXAMPLES
打钩
WITH_TBB
打钩
WITH_OPENMP
不要打钩,推荐使用TBB
OPENCV_ENABLE_NONFREE
打钩
python
相关的钩去掉
OPENCV_EXTRA_MODULES_PATH

D:/sdk/vs2017-x86/opencv-3.4.5-cpu/opencv_contrib-3.4.5/modules

D:/sdk/vs2017-x86/opencv-4.0.1-cpu/opencv_contrib-4.0.1/modules




7.点按钮‘Generate’生成工程文件,然后点按钮‘Open Project’,

 批生产'Debug'和'Release'的 Build ZERO_CHECK 项目,看两次编译是否产生错误

如果两次编译成功,则进行下一步:


8.依次进行 ALL_BUILD(生成很多 OpenCV 项目文件,D+R 耗时 6 Hours)

如果ALL_BUILD成功,依次进行INSTALL(在 build 下生成 install 文件夹,耗时 5 mins)


三、opencv3&4 编译【windows gpu】

1.建议先把前面的opencv-cpu编译通过,然后再编译gpu

2.安装nvidia驱动:截止2019.1.4最新版本是417.35(不需要安装geforce experience,后面cuda安装也提示装它)

3.安装cuda,cudnn:https://developer.nvidia.com/cuda-downloads 和 https://developer.nvidia.com/cudnn

  版本选择:CUDA 10.0.130(October 30, 2018);cuDNN v7.4.2 (Dec 14, 2018)

  cudnn安装:解压到cuda安装目录即可:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0

  测试:打开命令行输入nvcc --version

4.cmake编译器必须选64位:★★★vs2017-x64★★★,虽然cuda也可以用在32位机器上,但cufft, npps, nvblas等库只有x64版本

5.cmake编译选项

选项说明

包含cu的选项都去掉:

WITH_CUDA


打钩
BUILD_EXAMPLES
打钩
INSTALL_C_EXAMPLES
打钩
WITH_TBB
打钩
WITH_OPENMP
不要打钩,推荐使用TBB
OPENCV_ENABLE_NONFREE
打钩
python
相关的钩去掉
OPENCV_EXTRA_MODULES_PATH

D:/sdk/vs2017-x86/opencv-3.4.5-gpu/opencv_contrib-3.4.5/modules

D:/sdk/vs2017-x86/opencv-4.0.1-gpu/opencv_contrib-4.0.1/modules




6.cuda编译时可能会有error,修改opencv-4.0.1-gpu\modules\core\include\opencv2\core\cuda\detail\color_detail.hpp

第96到127行,把const改为constexpr,如下:

image.png



7.后面的编译步骤就是【windows cpu】的7,8小节

四、属性表

https://github.com/wjx0912/CppBaseUtils/blob/master/document/vs2017-x86-props/opencv4_cpu.props


https://github.com/wjx0912/CppBaseUtils/blob/master/document/vs2017-x64-props/opencv4_gpu.props


下面是demo


// cpu demo:
#include <opencv2/opencv.hpp>

int main()
{
    std::cout << "Hello World!\n"; 
	cv::Mat img = cv::imread("C:/Users/wyt/Desktop/1.png");
	cv::imshow("显示图片", img);
	cv::waitKey(0);
}


// gpu demo
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{
    std::cout << "Hello World!\n"; 

	int num_devices = cuda::getCudaEnabledDeviceCount();
	if (num_devices <= 0)
	{
		cout << "There is no device." << endl;
		return -1;
	}
	int enable_device_id = -1;
	for (int i = 0; i < num_devices; i++)
	{
		cuda::DeviceInfo dev_info(i);
		if (dev_info.isCompatible())
		{
			enable_device_id = i;
		}
	}
	if (enable_device_id < 0)
	{
		cout << "GPU module isn't built for GPU" << endl;
		return -1;
	}
	cuda::setDevice(enable_device_id); // 设置当前使用的CUDA
	cout << "GPU is ready, device ID is " << num_devices << "\n";
	Mat src_image = imread("C:/Users/wyt/Desktop/1.png");
	Mat dst_image;
	cuda::GpuMat d_src_img(src_image);
	cuda::GpuMat d_dst_img;
	cuda::cvtColor(d_src_img, d_dst_img, COLOR_BGR2GRAY);
	d_dst_img.download(dst_image);
	namedWindow("test", 0);
	imshow("test", dst_image);
	waitKey(0);
}


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

静思围棋版权所有©2019,鄂ICP备18006581号-1,18006581号-2,