当前位置: 首页 > article >正文

win10 opencv gpu c++版本编译教程

win10 opencv gpu c++版本编译教程

一、环境准备

cuda/cudnn
  • 根据显卡选择合适版本
  • cuda下载地址
  • cudnn下载地址
cmake安装
  • cmake下载地址
opencv 源码和 opencv_contrib
  • 这里使用的是opencv4.8.0版本,

  • opencv下载

  • opencv_contrib下载

  • 注意:opencv cmake编译过程会下载第三方库,网络不通会导致编译失败,使用完整的cache文件可加速编译。
    在这里插入图片描述
    注意:opencv cmake编译过程会下载第三方库,网络不通会导致编译失败,使用完整的cache文件可加速编译。

二、CMake编译

1、编译准备
  • .cache 复制到opencv4.8.0源码目录
    在这里插入图片描述
2、开始cmake编译

1、打开CMake,where is the source code是Opencv sources(opencv-4.8.0)的文件夹位置,where to build the binaries是编译opencv保存的文件夹位置(自定义),在左下角第一次点击Configure
在这里插入图片描述
2、在弹出的窗口选择编译器,选择对应vs的版本
在这里插入图片描述
3、显示Configuring done后,在Search搜索框搜索带cuda的关键字,全部勾选。
在这里插入图片描述
4、Search搜索框搜索OPENCV_EXTRA_MODULES_PATH,添加解压的opencv_contrib中的modules的路径。
在这里插入图片描述
5、选择build_opencv_world 可以将所有opencv的库都打包编译在一起,后续配置C++的opencv环境时不需要自己手动选择添加每个小模块。
在这里插入图片描述
6、对于python、java、js、tests相关选项的选择,用Search搜索框分别搜索“python”,“java”,“js”,“tests”,根据需要选中和取消相关选项,默认都是选中的,我们只需要c++相关的,因此都取消了,第二次点击Configure
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
7、显示Configuring done后,搜索arch选择需要支持的显卡算力。
在这里插入图片描述

8、搜索ENABLE_FAST_MATH勾选,第三次点击Configure。
在这里插入图片描述
9、显示Configuring done后,点击generate,显示generating done,成功完成cmake编译。
在这里插入图片描述

3、vs编译

1、需要选择release模式编译,配置管理器中勾选install

在这里插入图片描述
2、 ALL_BUILD 右键 点击生成,等待2-3小时编译。
在这里插入图片描述
3、同样在release|x64模式下,在解决方案资源管理器—>CMakeTargets—>右键点击INSTALL–>生成。
在这里插入图片描述
4、编译完成后,安装目录如下
在这里插入图片描述

三、测试gpu功能

简单测试c++代码

#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <opencv2/core/cuda.hpp>
#include <opencv2/cudaarithm.hpp>
#include <opencv2/cudaimgproc.hpp>

#include <iostream>

int main()
{
	// 检查CUDA是否可用
	if (!cv::cuda::getCudaEnabledDeviceCount())
	{
		std::cerr << "CUDA is not available on this system." << std::endl;
		return -1;
	}

	// 创建三个单通道GPU矩阵
	cv::cuda::GpuMat gpuMat1(2, 2, CV_8UC1, cv::Scalar(10));
	cv::cuda::GpuMat gpuMat2(2, 2, CV_8UC1, cv::Scalar(20));
	cv::cuda::GpuMat gpuMat3(2, 2, CV_8UC1, cv::Scalar(30));

	// 创建一个向量来保存这三个矩阵
	std::vector<cv::cuda::GpuMat> gpuMats;
	gpuMats.push_back(gpuMat1);
	gpuMats.push_back(gpuMat2);
	gpuMats.push_back(gpuMat3);

	// 使用merge函数合并这三个矩阵到一个三通道GPU矩阵
	cv::cuda::GpuMat mergedMat;
	cv::cuda::merge(gpuMats, mergedMat);


	// 创建一个输出矩阵来保存阈值操作的结果
	cv::cuda::GpuMat thresholdMat;

	// 应用阈值操作,阈值设置为50,最大值设置为100
	cv::cuda::threshold(mergedMat, thresholdMat, 50, 100, cv::THRESH_BINARY);

	// 将阈值操作的结果下载到CPU
	cv::Mat cpuThresholdMat;
	thresholdMat.download(cpuThresholdMat);

	// 打印结果
	std::cout << "Threshold result:\n" << cpuThresholdMat << std::endl;

	return 0;
}

输出结果:
在这里插入图片描述


http://www.kler.cn/news/365394.html

相关文章:

  • 未来汽车驾驶还会有趣吗?车辆动力学系统简史
  • VUE中文本域默认展示最底部内容
  • 开发运维警示录-20241024
  • FreeRTOS代码规范(3)
  • 空间音频技术
  • ANSI C、ISO C、POSIX标准、GNU的含义
  • HarmonyOS 5.0应用开发——Navigation实现页面路由
  • 全方面熟悉Maven项目管理工具(一)认识Maven、Maven如何安装?
  • 使用Angular构建动态Web应用
  • 怎么看AI大模型(LLM)、智能体(Agent)、知识库、向量数据库、知识图谱,RAG,AGI 的不同形态?
  • 使用WPF写一个简单的开关控件
  • 小程序无法获取头像昵称以及手机号码的深度剖析与解决方案
  • 【Fargo】15: 使用mediasoup的UdpSocket发送数据
  • ubuntu20.04上使用 Verdaccio 搭建 npm 私有仓库
  • http 请求返回307
  • UI管理器的使用
  • SVN(Subversion)的介绍和使用
  • 在 Excel 中的单元格内开始一行新文本
  • idea项目搭建的四种方式: 一(以idea2017为例)
  • WPF中的ContentPresenter、ItemsPresenter、ScrollContentPresenter
  • P10424 [蓝桥杯 2024 省 B] 好数 题解
  • 机器学习与神经网络:发展历程及其对社会经济的深远影响
  • 内置数据类型、变量名、字符串、数字及其运算、数字的处理、类型转换
  • windows中git无法通过ssh连接github
  • Unreal Engine5安装Niagara UI Renderer插件
  • 鸿蒙实现相机拍照及相册选择照片