opencv的cuda加速,速度进来学!

        总所周知显卡的加速是很强的,最近在利用onnx进行网络模型的Visual Studio的部署过程中发现速度非常慢,查找了一系列的资料发现原来使用的是CPU在跑。这里有一个误区,之前以为装了opencv,装了cuda再使用以下代码就能进行opencv的cuda加速进行模型的推理。

void load_net(cv::dnn::Net& net, bool is_cuda,string net_path)
{
	cv::utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT);//不再输出OpenCV的日志
	//利用readNst读取onnx文件里面的网络模型
	//string a = "D:/onnxtest/0/yolov5l.onnx";
	auto result = cv::dnn::readNet(net_path);
	if (is_cuda)	//判断是否使用GPU加速
	{
		std::cout << "Attempty to use CUDA\n";
		result.setPreferableBackend(cv::dnn::DNN_BACKEND_CUDA);		//此行代码将深度学习模块的后端设置为 CUDA
		result.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA_FP16);	//此行代码将深度学习模块的目标设置为 CUDA 的 FP16 模式:快但需要损失一些精度
	}
	else
	{
		std::cout << "Running on CPU\n";
		result.setPreferableBackend(cv::dnn::DNN_BACKEND_OPENCV);
		result.setPreferableTarget(cv::dnn::DNN_TARGET_CPU);
	}
	net = result;
}

        可以看到推理时间非常慢,并且任务管理器看到CPU的利用率非常高。

        后面发现opencv要使用cuda加速的话是需要进行重新编译的,这里我就不贴教程了,大佬的教程非常详细,直接参考这个:win10 编译opencv4.5.5 (gpu版)_cuda_arch_bin-CSDN博客。(为了让你们不点链接我把上面这个链接取消了,有两个注意事项需要先看再点,帮你节约半小时以上的时间!!!看完注意事项我会再贴)

        其中有几个非常重要的细节:建议先阅读完以下两点细节再按照上面的链接进行编译。

        ①opencv的cuda编译需要使用的.ache文件的下载我贴一下网盘的链接:

链接:https://pan.baidu.com/s/1T3WeEfhippgPrxXWnMlfAw 提取码:2233
        顺便也贴一下另外两个要下载的文件的链接:
cmake下载的网盘链接
opencv_contrib-4.5.5的下载链接-->注意我这个贴的是opencv4.5.5版本的,其他版本的自己找一下哈

        ②显卡算力的查询:这一步要很小心,算力设置错误的话就会报错(说没有可用的GPU设备)。

        显卡与算力的对应配置可以在这个网址里面找到:NVIDIA英伟达GPU显卡算力一览(包含Tesla和GeForce、TITAN及RTX系列等)-CSDN博客

        OK,可以正式点这个链接开始学习opencv的编译了:win10 编译opencv4.5.5 (gpu版)_cuda_arch_bin-CSDN博客

-------------------------------------编译前要看的注意事项的分割线-------------------------------------------

        在编译好opencv的cuda版本之后使用发现还是不能进行opencv的cuda加速??
        是的,你还有一些事情要做:

        ①首先需要配置系统的环境变量:

        这里也有一个要注意的地方,此处设置的环境变量要在之前设置的opencv环境之前!!!不然会默认使用原先的环境路径。(当然删除之前的opencv环境变量应该是更好的选择);

        ②设置C++项目的环境变量:(能看到这篇博文的你配置C++的opencv环境应该不是难事)

        理论上来说实现这一步之后就可以使用opencv的cuda加速了,但是理论总是理想的,当你实在没有办法的时候,整点简单粗暴的东西就显得十分有效了。
        ③既然还是不能使用cuda加速,那是为什么呢?其实就是没有找到opencv_world455d.dll这个文件,所以,直接将opencv编译后的这个dll文件放到C++项目工程下的exe可执行文件的同意目录下就可以了!!

        ④然后在项目中打印一下:

std::cout<<cv::cuda::getCudaEnabledDeviceCount()<<std::endl;

如果打印的输出是1就是可以用GPU加速opencv了,输出是0的话说明还没成功。

----------总结一下最近的情况----------------

        最近这一周都在实现这个部署的动作,遇到了无数的问题,onnx模型不能读取,不能使用GPU加速opencv,tensorRT的部署过程中出现了内存泄漏等等无数的问题,对于非科班的我来说每一个问题都是天大的问题,一步一步脚踏实地做事是我喜欢的方式,所以很辛苦也不觉得难过。在遇到问题的时候网上的前辈们会给出很多有帮助的答案(这也是为什么近期写了很多博客的原因,质量不高大家多多包涵),在有些找不到答案的时候也可以自己慢慢摸索。很喜欢《送东阳马生序》中的那句:以中有足乐者,不知口体之奉不若人也。

        PS:如果能够帮到你的话,给我一个关注或者点赞,让我知道我帮到你了,这也是我继续创作的动力。

        

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
对于使用Qt、OpenCVCUDA加速图像处理的问题,你可以按照以下步骤进行操作: 1. 确保你已经正确安装了Qt、OpenCVCUDA,并且配置正确。 2. 在Qt项目中,包含OpenCVCUDA的头文件和库文件。你可以在项目.pro文件中添加类似下面的代码: ``` INCLUDEPATH += /path/to/opencv/include LIBS += -L/path/to/opencv/lib -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_imgcodecs INCLUDEPATH += /path/to/cuda/include LIBS += -L/path/to/cuda/lib64 -lcudart ``` 请根据你自己的安装路径进行相应的修改。 3. 在你的代码中,使用OpenCV进行图像处理操作。你可以使用OpenCV的函数来加载、处理和保存图像。例如,使用`cv::imread`加载图像,使用`cv::cvtColor`进行颜色空间转换,使用`cv::cuda::GpuMat`来处理CUDA加速的图像等等。 4. 如果你想使用CUDA加速某些图像处理操作,你可以使用OpenCVCUDA模块。例如,使用`cv::cuda::GpuMat`来存储图像数据,使用`cv::cuda::cvtColor`进行CUDA加速的颜色空间转换,使用`cv::cuda::GpuMat::upload`和`cv::cuda::GpuMat::download`在主机和设备之间传输数据等等。 5. 在你的Qt界面中,使用信号和槽机制来处理用户的输入和显示结果。你可以将图像显示在Qt的窗口中,通过信号和槽机制更新图像的显示。 通过以上步骤,你可以在Qt中结合OpenCVCUDA实现图像处理的加速。希望对你有帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值