OpenCV几何图像变换(7)重映射函数 remap()的使用

news2024/11/22 15:25:04
  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

应用一个通用的几何变换到图像上。
remap 函数使用指定的地图对源图像进行变换:
dst ( x , y ) = src ( m a p x ( x , y ) , m a p y ( x , y ) ) \texttt{dst} (x,y) = \texttt{src} (map_x(x,y),map_y(x,y)) dst(x,y)=src(mapx(x,y),mapy(x,y))
其中非整数坐标像素的值使用可用的一种插值方法进行计算。mapx 和 mapy 可以被分别编码为 map1 和 map2 中的单独浮点地图,或者作为 map1 中交错的浮点地图 (x, y),或者被编码为使用 convertMaps 创建的固定点地图。你可能会想从浮点表示转换到固定点表示的原因是后者可以产生更快(大约快两倍)的重映射操作。在转换的情况下,map1 包含对 (cvFloor(x), cvFloor(y)) 的配对,而 map2 包含在插值系数表中的索引。

在OpenCV中,remap()函数是一个非常强大的工具,用于对图像进行任意形式的重映射。这意味着你可以通过提供映射函数来自定义每个像素的新位置,从而实现各种各样的图像变换效果。

此函数不能原地操作。

函数原型


void cv::remap	
(
	InputArray 	src,
	OutputArray 	dst,
	InputArray 	map1,
	InputArray 	map2,
	int 	interpolation,
	int 	borderMode = BORDER_CONSTANT,
	const Scalar & 	borderValue = Scalar() 
)		

参数

  • 参数src 源图像。
  • 参数dst 目标图像。它具有与 map1 相同的尺寸和与 src 相同的类型。
  • 参数map1 第一个地图,可以是 (x, y) 点或仅 x 值,具有类型 CV_16SC2, CV_32FC1, 或 CV_32FC2。有关将浮点表示转换为固定点以提高速度的详细信息,请参阅 convertMaps。
  • 参数map2 T第二个地图,包含 y 值,具有类型 CV_16UC1, CV_32FC1, 或无(如果 map1 是 (x, y) 点,则为空地图)。
  • 参数interpolation 插值方法(参见 InterpolationFlags)。该函数不支持 INTER_AREA 和 INTER_LINEAR_EXACT 方法。
  • 参数borderMode 像素外推方法(参见 BorderTypes)。当 borderMode 为 BORDER_TRANSPARENT 时,意味着目标图像中对应于源图像中的“异常值”的像素不会被函数修改。
  • 参数borderValue 在存在常数边界时所使用的值。默认情况下,它是 0。

代码示例


#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;

int main(int argc, char** argv)
{
    // 读取图像
    Mat src = imread("/media/dingxin/data/study/OpenCV/sources/images/fruit_small.jpg");
    
    if (src.empty()) {
        std::cerr << "Error: Could not open or find the image." << std::endl;
        return -1;
    }
    

    Mat horiImage;
    Mat verImage;
  
   
	Mat srcx(src.rows, src.cols, CV_32F); // x 方向
	Mat srcy(src.rows, src.cols, CV_32F); // y 方向
 
	//水平镜像
	
	for (size_t i = 0; i < src.rows; i++)
	{
		for (int j = 0; j < src.cols; j++)
		{
			srcx.at<float>(i, j) = src.cols - j - 1;
			srcy.at<float>(i, j) = i;
			
		}
	}
	remap(src, horiImage, srcx, srcy, INTER_LINEAR);
	
	
 
	//垂直镜像
	for (size_t i = 0; i < src.rows; i++)
	{
		for (int j = 0; j < src.cols; j++)
		{
			srcx.at<float>(i, j) = j;
			srcy.at<float>(i, j) = src.rows -i -1;
 
		}
	}
	remap(src, verImage, srcx, srcy, INTER_LINEAR);

    imshow("原始图像",src);
    imshow("水平镜像", horiImage);
	imshow("垂直镜像", verImage);
 
	waitKey(0);
	return 1;

}

运行结果

在这里插入图片描述

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

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

相关文章

VulnStack2-主机不出网-黄金票据-SID History

网络结构 kali192.168.20.145DC10.10.10.10PC192.168.20.201/10.10.10.201WEB192.168.20.80/10.10.10.80 WEB登录时&#xff0c;切到V1.3快照 且不登录默认用户 开启weblogic服务 漏洞利用 访问Weblogic默认的console路由http://192.168.20.80:7001/console 直接用工具打一…

深信服研发面试经验分享

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…

新手友好:易于上手的10款项目管理工具推荐

国内外主流的 10 款轻量级项目管理软件对比&#xff1a;PingCode、Worktile、Coding、致远OA、Gitee、Wrike、ClickUp、Notion、Airtable、Basecamp。 在快节奏的工作环境中&#xff0c;有效的项目管理是成功的关键&#xff0c;尤其是对于资源有限的小型团队和初创公司而言。轻…

golang实现一个简单的rpc框架

前言 RPC在分布式系统中经常使用&#xff0c;这里写一个简单的demo实践一下。 code 先生成 go.mod 文件 go mod init rpc-try01定义方法 package model// Args 是 RPC 方法的参数结构体 type Args struct {A, B int }// Arith 定义了一个简单的算术服务 type Arith struct{…

解锁 Vue 3 Teleport 的魔力

偶然遇到一个场景&#xff0c;在项目开发中蒙层是很常见的一个组件&#xff0c;我们期望它会在 body 下显示&#xff0c;但有时候代码逻辑结构很合理&#xff0c;组件结构不是很合理&#xff0c;也就是说蒙层组件不在 body 下&#xff0c;比如说&#xff1a; 蒙层组件 <te…

初识网络--网络基础概念

目录 1 网络的发展 2 协议 ​编辑 3 网络传输的流程 局域网 跨网络通信 1 网络的发展 计算机是被人设计出来&#xff0c;为人提供计算服务的&#xff0c;而人是需要协作的&#xff0c;那么就注定计算机之间也必须要协作&#xff0c;计算机之间的协作就是靠互通数据来完成…

MySQL的源码安装

目录 1 编译前的准备 1.1 安装cmake 1.2 安装gcc 2 源码编译安装 2.1 使用cmake检查环境并指定路径 2.2 使用 make 进行源码编译 2.3 使用 make install 安装MySQL 3 MySQL源码安装环境配置 3.1 创建mysql 用户 3.2 编辑my.cnf 文件 3.3 conkconfig 创建开机自启服务 3.4 配置…

这 2 个 GitHub 项目,YYDS!

01 &#x1f9e0; 构建你的第二大脑&#xff1a;SuperMemory 在这个信息爆炸的时代&#xff0c;我们每天都在互联网上浏览和保存大量的信息&#xff0c;但往往这些宝贵的数据就像被扔进了黑洞&#xff0c;再也没有被回顾和利用。 SuperMemory 开源项目应运而生&#xff0c;旨在…

OLED(hal库)、OLED取模

目录 OLED&#xff08;hal库&#xff09; IIC通讯协议 软件IIC ​编辑 硬件IIC 移植OLED代码 代码测试 ​编辑 测试 这是我改好滴文件 OLED取模 软件 ​编辑文字 图片 OLED&#xff08;hal库&#xff09; IIC通讯协议 软件IIC 软件I2C&#xff08;或IIC&…

:class的用法及应用

参考小满视频 在同一个标签中&#xff0c;class只能有一个&#xff0c;:class也只能有一个 :class的用法 1. :class “非响应式的变量”&#xff08;一般不使用&#xff0c;和写死了一样&#xff09; const a "style1" <span :class"a"></spa…

JSONP实现跨域访问

JSONP实现跨域访问 课程目标 1、理解JSONP跨域访问的解决方案和实现原理 2、能够利用JavaScript后台和JQuery实现跨域处理 3、理解JavaScript后台代码回调的工作机制&#xff0c;并实现代码回调 4、综合上述&#xff0c;利用JSONP实现跨域访问 一、生成JSON响应 1、生成…

Nginx--监控

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、Nginx的基础监控 进程监控 端口监控 注意&#xff1a; 这两个是必须要加在zabbix监控&#xff0c;加触发器有问题及时告警。 nginx 提供了ngx…

8-9月强化速成|30天带刷《严选题》《660》

如果你的目标是90-100分&#xff0c;肯定是够了&#xff0c;但是像下面这样微调一下更好 你的基础阶段做的是辅导讲义上的题目&#xff0c;那么你的基础阶段的题量肯定是够了。 但是强化阶段如果只做660题和严选题&#xff0c;这个题量还有有一些薄弱的&#xff0c;建议可以把…

在线BLOG网

TOC springboot0785在线BLOG网 第1章 绪论 1.1课题背景 计算机的普及和互联网时代的到来使信息的发布和传播更加方便快捷。人们可以通过计算机上的浏览器访问多个应用系统&#xff0c;从中获取一些可以满足用户生活需求的管理系统。网站系统有时更像是一个大型“展示平台”…

【MySQL】半同步模式

1 半同步模式原理 1. 用户线程写入完成后 master 中的 dump 会把日志推送到 slave 端 2.slave 中的 io 线程接收后保存到 relaylog 中继日志 3. 保存完成后 slave 向 master 端返回 ack 4. 在未接受到 slave 的 ack 时 master 端时不做提交的&#xff0c;一直处于等待当收到…

Linux离线安装fontconfig

Linux离线下载yum包&#xff0c;安装字体库 一、下载安装包 以CentOS Linux release 7.9.2009下载fontconfig的rpm包的为例 http://mirror.centos.org/centos/7/按提示跳转历史库 找到对应版本的centos https://vault.centos.org/7.9.2009/os/x86_64/Packages/在Packages目…

5个免费的文章生成器,为你在线生成高质量原创文章

在ai技术发展的今天&#xff0c;我们面对文章创作再也不用感到苦恼&#xff0c;无论是没有创作灵感&#xff0c;还是不擅长写作&#xff0c;只要有了文章生成器&#xff0c;那么它就能帮助我们轻松完成任何类型的文章创作。文章生成器虽然很强大&#xff0c;但是市面上众多的文…

服务器备份

服务器备份 一、方案 FreeFileSync freeSSHd Windows任务计划程序 FreeFileSync&#xff1a;设置文件备份方案&#xff08;双向同步、镜像同步、更新同步、自定义同步&#xff09;&#xff0c;适用于本地的文件同步之外&#xff0c;还支持 Google Driver、SFTP 和 FTP 三种…

【Docker】安装Docker环境遇到的坑(VirtualBox)

利用vagrant工具在VirtualBox安装CentOS7环境后&#xff0c;安装Docker环境遇到的坑 前期准备工作 1、卸载原有环境 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engi…

10 Java数据结构:包装类、数组(Array工具类)、ArrayList

文章目录 前言一、包装类1、Integer&#xff08;1&#xff09;基本用法&#xff08;2&#xff09;JDK5前的包装类用法&#xff08;了解即可&#xff0c;能更好帮助我们理解下面的自动装箱和自动拆箱机制&#xff09;&#xff08;3&#xff09;自动装箱与自动拆箱机制 --- 导致&…