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

opencv gpu cuda python c++版本测试代码

环境:opencv4.10  显卡3060Ti

编译好后,测试代码

import cv2
from cv2 import cuda
cuda.printCudaDeviceInfo(0)

python opencv cuda测试代码

import cv2
import numpy as npdef main():# Define method enum equivalentMOG = 0MOG2 = 1# Select methodmethod = MOG# Check CUDA device countcount = cv2.cuda.getCudaEnabledDeviceCount()print(f"GPU Device Count : {count}")# Create CUDA Streamstream = cv2.cuda_Stream()# Open video capturecap = cv2.VideoCapture("nfs.mp4")# Read first frameret, frame = cap.read()if not ret:print("Failed to read video")return# Create CUDA GpuMatd_frame = cv2.cuda_GpuMat()d_frame.upload(frame)# Create background subtractorif method == MOG:bg_subtractor = cv2.cuda.createBackgroundSubtractorMOG()else:bg_subtractor = cv2.cuda.createBackgroundSubtractorMOG2()# Create CUDA GpuMatsd_fgmask = cv2.cuda_GpuMat()d_fgimg = cv2.cuda_GpuMat()d_bgimg = cv2.cuda_GpuMat()while True:ret, frame = cap.read()if not ret:breakstart = cv2.getTickCount()try:# Upload frame to GPUd_frame.upload(frame)# Update the modelif method == MOG:d_fgmask = bg_subtractor.apply(d_frame, 0.01, stream)else:d_fgmask = bg_subtractor.apply(d_frame, learningRate=-1, stream=stream)# Get background imaged_bgimg = bg_subtractor.getBackgroundImage(stream)# Download mask for processingfgmask = d_fgmask.download()# Process mask on CPU (threshold)_, fgmask = cv2.threshold(fgmask, 250, 255, cv2.THRESH_BINARY)# Convert to 3 channelsfgmask_3ch = cv2.cvtColor(fgmask, cv2.COLOR_GRAY2BGR)# Upload processed mask back to GPUd_fgmask_3ch = cv2.cuda_GpuMat()d_fgmask_3ch.upload(fgmask_3ch)# Create output GPU Mat for foregroundd_fgimg = cv2.cuda_GpuMat(d_frame.size(), d_frame.type())# Extract foreground using multiplycv2.cuda.multiply(d_frame, d_fgmask_3ch, d_fgimg, 1.0/255.0, -1, stream)# Synchronize CUDA Streamstream.waitForCompletion()# Download results from GPUfgimg = d_fgimg.download()bgimg = None if d_bgimg.empty() else d_bgimg.download()# Calculate FPSfps = cv2.getTickFrequency() / (cv2.getTickCount() - start)cv2.putText(frame, f"FPS : {fps:.2f}", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 255), 2, cv2.LINE_AA)# Show resultscv2.imshow("image", frame)cv2.imshow("foreground mask", fgmask)cv2.imshow("foreground image", fgimg)if bgimg is not None:cv2.imshow("mean background image", bgimg)except cv2.error as e:print(f"OpenCV Error: {e}")continue# Check for ESC keyif cv2.waitKey(1) == 27:break# Clean upcap.release()cv2.destroyAllWindows()if __name__ == "__main__":main()

其实以上的python代码由以下的c++转换来的,如果想在c++环境中测试opencv gpu效果

c++代码

https://cloud.tencent.com/developer/article/1523416

#include <iostream>
#include <string>#include "opencv2/core.hpp"
#include "opencv2/core/utility.hpp"
#include "opencv2/cudabgsegm.hpp"
#include "opencv2/video.hpp"
#include "opencv2/highgui.hpp"using namespace std;
using namespace cv;
using namespace cv::cuda;enum Method
{MOG,MOG2,
};int main(int argc, const char** argv)
{Method m = MOG;int count = cuda::getCudaEnabledDeviceCount();printf("GPU Device Count : %d \n", count);VideoCapture cap;cap.open("D:/images/video/example_dsh.mp4");Mat frame;cap >> frame;GpuMat d_frame(frame);Ptr<BackgroundSubtractor> mog = cuda::createBackgroundSubtractorMOG();Ptr<BackgroundSubtractor> mog2 = cuda::createBackgroundSubtractorMOG2();GpuMat d_fgmask;GpuMat d_fgimg;GpuMat d_bgimg;Mat fgmask;Mat fgimg;Mat bgimg;switch (m){case MOG:mog->apply(d_frame, d_fgmask, 0.01);break;case MOG2:mog2->apply(d_frame, d_fgmask);break;}namedWindow("image", WINDOW_AUTOSIZE);namedWindow("foreground mask", WINDOW_AUTOSIZE);namedWindow("foreground image", WINDOW_AUTOSIZE);namedWindow("mean background image", WINDOW_AUTOSIZE);for (;;){cap >> frame;if (frame.empty())break;int64 start = cv::getTickCount();d_frame.upload(frame);//update the modelswitch (m){case MOG:mog->apply(d_frame, d_fgmask, 0.01);mog->getBackgroundImage(d_bgimg);break;case MOG2:mog2->apply(d_frame, d_fgmask);mog2->getBackgroundImage(d_bgimg);break;}d_fgimg.create(d_frame.size(), d_frame.type());d_fgimg.setTo(Scalar::all(0));d_frame.copyTo(d_fgimg, d_fgmask);d_fgmask.download(fgmask);d_fgimg.download(fgimg);if (!d_bgimg.empty())d_bgimg.download(bgimg);imshow("foreground mask", fgmask);imshow("foreground image", fgimg);if (!bgimg.empty())imshow("mean background image", bgimg);double fps = cv::getTickFrequency() / (cv::getTickCount() - start);// std::cout << "FPS : " << fps << std::endl;putText(frame, format("FPS : %.2f", fps), Point(50, 50), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(0, 0, 255), 2, 8);imshow("image", frame);char key = (char)waitKey(1);if (key == 27)break;}return 0;
}

http://www.dtcms.com/a/499345.html

相关文章:

  • 建设旅游门户网站安徽网站建设推荐 晨飞网络
  • 鸿蒙Next Wear Engine Kit:打造无缝连接的穿戴应用体验
  • 哪里有免费的网站推广软件网站源码上传完后怎么做
  • 快手测开面试题总结合并版(按分类标注序号+出现频率)
  • P1005 [NOIP 2007 提高组] 矩阵取数游戏
  • JAVA面试复习笔记(待完善)
  • 七、WEB APIs(二)
  • LLMs-from-scratch :多种字节对编码(BPE)对比
  • 济南哪里有网站建设公司网站类网站开发源代码
  • 做笔记的网站源码wordpress手机版论坛
  • 网站推广有哪些举措域名需要跟网站名称一致么
  • 具身神经-机器人通讯架构与实现系列
  • [GO]gin框架:ShouldBindJSON与其他常见绑定方法
  • KUKA库卡焊接机器人二氧化碳节气
  • 机器人、具身智能的起步——线性系统理论|【三】线性、因果与时不变
  • 服务器做php网站吗wordpress评论贴图
  • 网站建设与管理的心得怎样做音乐网站
  • 请例举 Android 中常用布局类型,并简述其用法以及排版效率
  • Android 约束布局(ConstraintLayout)的权重机制:用法与对比解析
  • 编程与数学 03-007 《看潮资源管理器》项目开发 07 主窗口设计(3-3)
  • 基于单片机的架空线路接地故障检测与报警系统
  • 鸿蒙实现滴滴出行项目之乘客支付订单功能
  • 如何把自己做的网站放到网上360建筑网怎样取消发布的消息
  • 做网站有哪个空间网站建设优化推广贵州
  • 西电25年A测 语音识别机械臂方案与教程
  • 数据结构——队列的链式存储结构
  • 媒体135网站口碑好的宜昌网站建设
  • 湖南省建设银行网站官网深圳龙华网站建设公司
  • 网站后台管理系统源码网站空间文件夹
  • 元宇宙与公共服务的深度融合:重构民生服务的效率与温度