【高性能计算】CUDA编程之OpenCV的应用(教程与代码-4)//test error

news/2024/10/23 7:27:59/

imread命令将返回以蓝色、绿色和红色(BGR格式)开头的三个通道
处理视频的main函数中需要做的第一件事是创建VideoCapture对象。 GPU
CUDA模块中的函数都定义在cv::cuda命名空间中,将设备上配置给图像数据用的显存块作为其参数。
gettickcount函数返回启动系统后经过的时间(以毫秒为单位)


使用具有CUDA的opencv进行阈值滤波
 

#include <iostream>
#include "opencv2/opencv.hpp"
int main (int argc, char* argv[])
{cv::Mat h_img1 = cv::imread("images/cameraman.tif", 0);
cv::cuda::GpuMat d_result1,d_result2,d_result3,d_result4,d_result5, d_img1;
//Measure initial time ticks
int64 work_begin = cv::getTickCount(); 
d_img1.upload(h_img1);
cv::cuda::threshold(d_img1, d_result1, 128.0, 255.0, cv::THRESH_BINARY);
cv::cuda::threshold(d_img1, d_result2, 128.0, 255.0, cv::THRESH_BINARY_INV);
cv::cuda::threshold(d_img1, d_result3, 128.0, 255.0, cv::THRESH_TRUNC);
cv::cuda::threshold(d_img1, d_result4, 128.0, 255.0, cv::THRESH_TOZERO);
cv::cuda::threshold(d_img1, d_result5, 128.0, 255.0, cv::THRESH_TOZERO_INV);
cv::Mat h_result1,h_result2,h_result3,h_result4,h_result5;
d_result1.download(h_result1);
d_result2.download(h_result2);
d_result3.download(h_result3);
d_result4.download(h_result4);
d_result5.download(h_result5);
//Measure difference in time ticks
int64 delta = cv::getTickCount() - work_begin;
double freq = cv::getTickFrequency();
//Measure frames per second
double work_fps = freq / delta;
std::cout <<"Performance of Thresholding on GPU: " <<std::endl;
std::cout <<"Time: " << (1/work_fps) <<std::endl;
std::cout <<"FPS: " <<work_fps <<std::endl;return 0;
}
  • 使用cuda+opencv修改图像大小

#include <iostream>
#include "opencv2/opencv.hpp"
#include <iostream>
#include "opencv2/opencv.hpp"
int main ()
{cv::Mat h_img1 = cv::imread("images/cameraman.tif",0);cv::cuda::GpuMat d_img1,d_result1,d_result2;d_img1.upload(h_img1);int width= d_img1.cols;int height = d_img1.size().height;cv::cuda::resize(d_img1,d_result1,cv::Size(200, 200), cv::INTER_CUBIC);cv::cuda::resize(d_img1,d_result2,cv::Size(0.5*width, 0.5*height), cv::INTER_LINEAR);    cv::Mat h_result1,h_result2;d_result1.download(h_result1);d_result2.download(h_result2);cv::imshow("Original Image ", h_img1);cv::imshow("Resized Image", h_result1);cv::imshow("Resized Image 2", h_result2);cv::imwrite("Resized1.png", h_result1);cv::imwrite("Resized2.png", h_result2);cv::waitKey();return 0;
}

  • 使用HARR进行人脸检测

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{VideoCapture cap(0);if (!cap.isOpened()) {cerr << "Can not open video source";return -1;}std::vector<cv::Rect> h_found;cv::Ptr<cv::cuda::CascadeClassifier> cascade = cv::cuda::CascadeClassifier::create("haarcascade_frontalface_alt2.xml");cv::cuda::GpuMat d_frame, d_gray, d_found;while(1){Mat frame;if ( !cap.read(frame) ) {cerr << "Can not read frame from webcam";return -1;}d_frame.upload(frame);cv::cuda::cvtColor(d_frame, d_gray, cv::COLOR_BGR2GRAY);cascade->detectMultiScale(d_gray, d_found);cascade->convert(d_found, h_found);for(int i = 0; i < h_found.size(); ++i){rectangle(frame, h_found[i], Scalar(0,255,255), 5);}imshow("Result", frame);if (waitKey(1) == 'q') {break;}}return 0;
}

总结

本教程是自己学习CUDA所遇到的一些概念与总结,由于CUDA主要是一个应用,还是以代码为主,加速算法与硬件息息相关,干了很久深度学习了,对于硬件的知识已经遗忘很多,后续还是复习一些硬件知识后再继续深入吧。


http://www.ppmy.cn/news/1138556.html

相关文章

用VLD调查VC内存泄漏

一、发现内存泄漏 使用VS2022&#xff0c;发现提示有内存泄漏&#xff0c;检查了所有的new&#xff0c;确认都有相应的delete释放。 Detected memory leaks! Dumping objects -> {1914} normal block at 0x0000021FDFFBD2E0, 48 bytes long.Data: < >…

redis 雪崩,穿透,击穿及解决方案

一、缓存雪崩&#xff1a; 1. 原因: 缓存雪崩是指在我们设置缓存时大量采用了相同的过期时间&#xff0c;导致缓存在某一时刻同时失效&#xff0c;请求全部转发到DB&#xff0c;DB瞬时压力过重雪崩。 2. 解决方案: 将失效时间分散&#xff0c;通过生成随机数使得key的过期时间…

3D孪生场景SDK:Viwer 孪生世界

NSDT 编辑器 提供三维场景构建、场景效果设计、场景服务发布全流程工具等&#xff0c;其场景编辑器支持资产管理、灯光设置、骨骼动画等功能&#xff1b;致力于协助资源不足的中小企业及个人快速开发数字孪生场景&#xff0c;帮助企业提高生产力、实现降本增效。 NSDT编辑器简…

C语言 实现 链 显示 效果 查找 修改 删除

显示所有信息 2023年10月1日的描述:今天放假 2023年10月2日的描述:今天有体育 2023年10月3日的描述:今天有数学 2023年10月4日的描述:今天有语文 2023年10月5日的描述:今天有政治 2023年10月6日的描述:今天交学费 2023年10月7日的描述:今天周末 2023年10月8日的描述:今天给家里…

利用freesurfer6进行海马分割的环境配置和步骤,以及获取海马体积

利用freesurfer6进行海马分割的环境配置和步骤 Matlab Runtime 安装1. 运行recon-all&#xff1a;2. 利用 recon-all -s subj -hippocampal-subfields-T1 进行海马分割3. 结束后需要在/$SUBJECTS_DIR/subject/的文件夹/mri路径下输入下面的代码查看分割情况4. 在文件SUBJECTS_D…

C++基础语法——unordered_map和unordered_set

目录 1. unordered系列关联式容器 2.unordered_map ①unordered_map的简介 ②unordered_map的构造 ③unordered_map的容量 ④unordered_map的迭代器 ⑤unordered_map的元素访问 ⑥unordered_map的查询 ⑦unordered_map的修改 ⑧unordered_map的桶操作 3.使用与对比测…

tkinter中如何执行,单击按钮后的线程操作

在Tkinter中&#xff0c;按钮可以绑定一个回调函数来处理点击事件。如果你想在按钮点击时执行一个线程操作&#xff0c;可以在回调函数中创建一个新的线程来处理这个操作。 #我的Python教程 #官方微信公众号&#xff1a;wdPython以下是一个简单的示例代码&#xff0c;演示如何…

条件查询和数据查询

一、后端 1.controller层 package com.like.controller;import com.like.common.CommonDto; import com.like.entity.User; import com.like.service.UserService; import jakarta.annotation.Resource; import org.springframework.web.bind.annotation.GetMapping; import …