pytorch实现图像remap

news2024/11/28 0:32:23
def gpu_remap(numpy_img,map_tensor):
    # 准备图像数据
    img_tensor = torch.from_numpy(numpy_img).contiguous().cuda(non_blocking=True)
    img_tensor = img_tensor.permute(2,0,1).unsqueeze(0).float()
    res = torch.nn.functional.grid_sample(img_tensor,map_tensor,
                                          mode='bilinear',
                                          padding_mode='zeros',
                                          align_corners=None)
    res = res.char()
    res = res[0].permute(1,2,0)
    res = res.cpu()
    res = res.numpy()
    res = np.uint8(res)
    return res
def cpu_remap(numpy_img,mapx,mapy):
    return cv2.remap(numpy_img,mapx,mapy,cv2.INTER_LINEAR)
if __name__=='__main__':
    mtx = np.asarray(
                      [[1.45400077e+03,0.00000000e+00,8.91370579e+02],
                       [0.00000000e+00,1.20949778e+03,3.22130436e+02],
                       [0.00000000e+00,0.00000000e+00,1.00000000e+00]])
    dist =np.asarray([[-0.45415106,0.42747461,0.04382156,0.003691,-0.29239333]])
    w,h = 1920,1080
    # 准备map
    mapx, mapy = cv2.initUndistortRectifyMap(mtx, dist, None, mtx, (w, h), 5)
        
    # 准备grid数据
    mapx_tensor = torch.from_numpy(mapx).unsqueeze(2)/1920*2-1
    mapy_tensor = torch.from_numpy(mapy).unsqueeze(2)/1080*2-1
    map_tensor = torch.cat([mapx_tensor,mapy_tensor],dim=2).unsqueeze(0).cuda() 
    img_org = cv2.imread('test.jpg')

    for i in range(100):
        cpu_res = cpu_remap(img_org,mapx,mapy)
   
    for i in range(100):
        cpu_res = gpu_remap(img_org,map_tensor)

计算了下耗时,结果发现还是CPU->GPU数据拷贝是瓶颈。。。但是计算耗时确实少很多,后续看看如何优化吧。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/777948.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c语言练手项目【编写天天酷跑游戏2.0】EASYX图形库的运用。代码开源,素材已打包

天天酷跑项目的开发 项目前言 项目是基于Windows,easyX图形库进行开发的, 开发环境:Visual Studio 2022 项目技术最低要求: 常量,变量,数组,循环,函数。 文章目录 天天酷跑项目的…

单体架构与微服务架构

什么是单体架构 单体架构(Monolithic Architecture)是一种传统的软件架构模式,它将整个应用程序作为一个单一、自治的单元构建和部署。在这种架构中,应用程序的所有功能和组件都被集成到一个统一的代码库中。 在单体架构中&…

【Linux网络】网络编程套接字(一)基础部分

目录 理解源IP地址和目的IP地址理解源MAC地址和目的MAC地址数据在网络传输过程中有两套地址socket通信的本质端口号和目的端口号 Post(端口号) 和 Pid (进程ID)认识TCP协议和UDP协议 网络字节序 理解源IP地址和目的IP地址 因特网上每台计算机都有自己的…

Jmeter-使用http proxy代理录制脚本

Jmeter-使用http proxy代理录制脚本 第1步:打卡jmeter工具新增1个线程组 第2步:给线程组添加1个HTTP请求默认值 第3步:设置下HTTP请求默认值第4步:在工作台中新增1个----HTTP代理服务器 第5步:设置HTTP代理服务器…

C# List 详解二

目录 5.Clear() 6.Contains(T) 7.ConvertAll(Converter) ,toutput> 8.CopyTo(Int32, T[], Int32, Int32) 9.CopyTo(T[]) 10.CopyTo(T[], Int32) C# List 详解一 1.Add(T),2.AddRange(IEnumerable),3.AsReadOnly()&…

区间预测 | MATLAB实现QRFR随机森林分位数回归多输入单输出区间预测

区间预测 | MATLAB实现QRFR随机森林分位数回归多输入单输出区间预测 目录 区间预测 | MATLAB实现QRFR随机森林分位数回归多输入单输出区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现QRFR随机森林分位数回归多输入单输出区间预测 Matlab实现基…

JVM运行时数据区——方法区的内部结构

方法区用于存储加载的字节码文件的信息,运行时常量池,运行时常量池我们可以把它看作是一张映射表,其中保存了类中的常量,变量,方法的引用。

CSS 瀑布流效果效果

示例 <!DOCTYPE html> <html lang="cn"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>瀑布流效果</title><style>…

【iOS】weak关键字的实现原理

前言 关于什么是weak关键字可以去看看我以前的一篇博客&#xff1a;【OC】 属性关键字 weak原理 1. SideTable SideTable 这个结构体&#xff0c;前辈给它总结了一个很形象的名字叫引用计数和弱引用依赖表&#xff0c;因为它主要用于管理对象的引用计数和 weak 表。在 NSOb…

【Spring Boot自动装配原理详解与常见面试题】—— 每天一点小知识

&#x1f4a7; S p r i n g B o o t 自动装配原理详解与常见面试题 \color{#FF1493}{Spring Boot自动装配原理详解与常见面试题} SpringBoot自动装配原理详解与常见面试题&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页—…

引领AI数据标注行业,景联文科技提供高质量图像和文本标注服务

近年来&#xff0c;我国的数据要素市场呈现出高速增长的趋势&#xff0c;根据国家工信安全中心的统计数据&#xff0c;截至2022年&#xff0c;我国数据要素市场规模已达到815亿元&#xff0c;同比增长49.51%。 数据要素作为数字经济时代的关键要素&#xff0c;是构建新发展格局…

蓝桥杯专题-真题版含答案-【垒骰子_动态规划】【抽签】【平方怪圈】【凑算式】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

【天气雷达】双偏振产品-差分相位ΦDP详解

一、定义 差分相移(Total differential phase,ΦDP) 多普勒天气雷达可以获得目标相对雷达运动产生的相位差。同样运动状态的降水区对于水平偏振波和垂直偏振波引起的相位变化是不同的。这个两者之间的差值与降水区的特性有关,由于这个两者之间差值是雷达电磁波往返于雷达…

Redis【实践篇】之RedisTemplate基本操作

Redis 从入门到精通【应用篇】之RedisTemplate详解 文章目录 Redis 从入门到精通【应用篇】之RedisTemplate详解0. 前言1. RedisTemplate 方法1. 设置RedisTemplate的序列化方式2. RedisTemplate的基本操作 2. 源码浅析2.1. 构造方法2.2. 序列化方式2.3. RedisTemplate的操作方…

回归预测 | MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.Matlab实现TCN-LSTM时间卷积神经网络结合长…

对C语言指针的理解

&是取地址&#xff0c;描述当前变量的内存位置 *是提取&#xff0c;描述指针变量所代表的变量的值&#xff1b;设计指针是为了节省内存空间&#xff0c;指针变量的巧妙使用可以减少内存中相同变量值的重复存储 多级指针中&#xff0c;一级指针指向普通变量的地址&#xff0…

AJAX-day03-AJAX进阶

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 同步代码和异步代码 回调函数地狱 Promise - 链式调用 Promise 链式应用 async函数和await async函…

操作系统笔记、面试八股(三)—— 系统调用与内存管理

文章目录 3. 系统调用3.1 用户态与内核态3.2 系统调用分类3.3 如何从用户态切换到内核态&#xff08;系统调用举例&#xff09; 4. 内存管理4.1 内存管理是做什么的4.1.1 为什么需要虚拟地址空间4.1.2 使用虚拟地址访问内存有什么优势 4.2 常见的内存管理机制4.3 分页管理4.3.1…

Sentinel规则持久化到nacos的实现(源码修改)

文章目录 1、Sentinel源码修改2、持久化效果测试 Sentinel规则管理有三种模式&#xff1a; 原始模式pull模式push模式 这是实现push方式&#xff1a; push模式即控制台将配置规则推送到远程配置中心&#xff0c;例如Nacos。Sentinel客户端去监听Nacos&#xff0c;获取配置变更…

通过URL对象实现简单爬虫功能

目录 一、URL类 1. URL类基本概念 2. 构造器 3. 常用方法 二、爬虫实例 1. 爬取网络图片&#xff08;简易&#xff09; 2. 爬取网页源代码 3. 爬取网站所有图片 一、URL类 1. URL类基本概念 URL&#xff1a;Uniform Resource Locator 统一资源定位符 表示统一资源定位…