c++视觉处理---图像重映射

news2025/6/22 12:49:17

图像重映射:cv::remap

cv::remap 是OpenCV中的一个函数,用于执行图像重映射,允许您通过重新映射像素的位置来变换图像。这个函数非常有用,可以用于各种图像处理任务,如校正畸变、透视变换、几何变换等。

下面是 cv::remap 函数的基本用法:

cv::remap(src, dst, map1, map2, interpolation, borderMode, borderValue);
  • src: 输入图像。
  • dst: 输出图像,用于存储重映射后的结果。
  • map1map2: 两个与 src 相同尺寸的浮点型(32位浮点)或短整型(16位整数)的映射矩阵,用于定义像素的新位置。
  • interpolation: 插值方法,可选参数,用于确定新位置的像素值。通常使用 cv::INTER_LINEAR 进行双线性插值。
  • borderMode: 边界模式,可选参数,定义当像素越出图像边界时的处理方式,通常使用 cv::BORDER_CONSTANTcv::BORDER_REPLICATE
  • borderValue: 当 borderModecv::BORDER_CONSTANT 时使用,用于指定图像边界外的像素值。

通过提供 map1map2 矩阵,您可以指定图像中每个像素的新位置。这允许您进行多种变换,如校正畸变、投影变换、透视变换等。

以下是一个简单的示例,演示如何使用 cv::remap 进行图像重映射以实现水平镜像效果:

#include <opencv2/opencv.hpp>

int main() {
    cv::Mat image = cv::imread("1.jpg", cv::IMREAD_COLOR);

    if (image.empty()) {
        std::cerr << "无法加载图像" << std::endl;
        return -1;
    }

    cv::Mat result(image.size(), image.type());

    cv::Mat map1, map2;
    map1.create(image.size(), CV_32F);
    map2.create(image.size(), CV_32F);

    for (int y = 0; y < image.rows; y++) {
        for (int x = 0; x < image.cols; x++) {
            map1.at<float>(y, x) = image.cols - x - 1; // 在X轴上反转像素位置
            map2.at<float>(y, x) = y;
        }
    }

    cv::remap(image, result, map1, map2, cv::INTER_LINEAR, cv::BORDER_CONSTANT, cv::Scalar(0, 0, 0));

    cv::imshow("原始图像", image);
    cv::imshow("重映射后的图像", result);
    cv::waitKey(0);

    return 0;
}

在这个示例中,我们创建了一个水平镜像效果,通过重新映射图像的像素位置,将每个像素的X坐标反转,从而实现镜像效果。请注意,您可以通过调整 map1map2 来实现不同的重映射效果。

在这里插入图片描述

相机实时重映射

#include <opencv2/opencv.hpp>

int main() {
    cv::VideoCapture cap(0); // 打开本地相机(通常是0号摄像头)

    if (!cap.isOpened()) {
        std::cerr << "无法打开相机" << std::endl;
        return -1;
    }

    cv::Mat map1, map2;
    cv::Mat mirrorMap1, mirrorMap2;

    int width = static_cast<int>(cap.get(cv::CAP_PROP_FRAME_WIDTH));
    int height = static_cast<int>(cap.get(cv::CAP_PROP_FRAME_HEIGHT));

    map1.create(height, width, CV_32F);
    map2.create(height, width, CV_32F);
    mirrorMap1.create(height, width, CV_32F);
    mirrorMap2.create(height, width, CV_32F);

    // 生成映射矩阵,实现水平镜像
    for (int y = 0; y < height; y++) {
        for (int x = 0; x < width; x++) {
            map1.at<float>(y, x) = x;
            map2.at<float>(y, x) = y;
            mirrorMap1.at<float>(y, x) = width - x - 1;
            mirrorMap2.at<float>(y, x) = y;
        }
    }

    cv::Mat frame;
    cv::Mat mirroredFrame;

    while (true) {
        cap >> frame; // 从相机捕获一帧图像

        if (frame.empty()) {
            std::cerr << "无法捕获图像" << std::endl;
            break;
        }

        // 应用重映射
        cv::remap(frame, mirroredFrame, mirrorMap1, mirrorMap2, cv::INTER_LINEAR, cv::BORDER_CONSTANT, cv::Scalar(0, 0, 0));

        cv::imshow("原始图像", frame);
        cv::imshow("水平镜像图像", mirroredFrame);

        // 检查用户是否按下ESC键,然后退出循环
        if (cv::waitKey(1) == 27) {
            break;
        }
    }

    return 0;
}

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

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

相关文章

Maven系列第5篇:私服详解

maven系列目标&#xff1a;从入门开始开始掌握一个高级开发所需要的maven技能。 这是maven系列第5篇。 整个maven系列的内容前后是有依赖的&#xff0c;如果之前没有接触过maven&#xff0c;建议从第一篇看起&#xff0c;本文尾部有maven完整系列的连接。 环境 maven3.6.1 …

ctfshow萌新计划web9-14(正则匹配绕过)

目录 web9 web10 web11 web12 web13 web14 web9 审一下代码&#xff0c;需要匹配到system|exec|highlight才会执行eval函数 先看一下当前目录下有什么 payload&#xff1a;?csystem(ls); index.php是首页&#xff0c;我们看看config.php payload&#xff1a;?csystem…

【FreeRADIUS】使用FreeRADIUS进行SSH身份验证

在数据中心中&#xff0c;可能有许多Linux机器&#xff0c;由管理员团队进行管理。这些管理员通过SSH访问这些服务器。如果希望使用一个集中的位置来管理这些管理员的身份验证。那么为了实现这一点&#xff0c;可以使用FreeRADIUS服务器。FreeRADIUS是一个功能强大的开源工具&a…

SwinTransformer学习记录(一)之整体架构

SwinTransformer自问世以来&#xff0c;凭借其优秀的性能&#xff0c;受到无数研究者的青睐&#xff0c;因此作为一个通用的骨干网络&#xff0c;其再目标检测&#xff0c;语义分割&#xff0c;去噪等领域大杀四方&#xff0c;可谓是风光无限&#xff0c;今天&#xff0c;我们便…

Linux防火墙配置

目录 一、firewalld防火墙简介二、firewalld放行端口方法三、firewalld放行服务方法四、firewalld富规则配置方法一、firewalld防火墙简介 Firewalld防火墙是CentOS 7系统默认的防火墙管理工具,它取代了之前版本的iptables防火墙。Firewalld工作在网络层,属于一种包过滤型防…

C语言,求质因数中的较大的值

首先要求出输入的质数的两个质因数&#xff0c;就要用到判断素数时用到的方法。用内循环产生2到n的数字&#xff0c;当求到了质因数之后&#xff0c;也要先用一个变量将质因数存起来&#xff0c;当后面遇到更大的质因数时&#xff0c;再将原来的质因数覆盖&#xff0c;如果更小…

SystemVerilog Assertions应用指南 第一章

1.1什么是断言 断言是设计的属性的描述。 ● 如果一个在模拟中被检查的属性( property)不像我们期望的那样表现,那么这个断言失败。 ● 如果一个被禁止在设计中出现的属性在模拟过程中发生,那么这个断言失败。 一系列的属性可以从设计的功能描述中推知,并且被…

恒驰服务 | 5大服务保障,轻松助力企业实现数据库迁移

随着经营规模的迅猛发展&#xff0c;IT信息系统在企业的日常运营中正发挥着越来越重要的作用。确保信息系统尤其是作为其核心与基石的数据库系统的安全、稳定、高效和敏捷运行&#xff0c;是支撑企业业务系统正常、可持续运营的核心基础&#xff0c;也是企业信息化部门各级管理…

LeetCode142:环形链表II

给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数…

前端--CSS

文章目录 CSS的介绍 引入方式 代码风格 选择器 复合选择器 (选学) 常用元素属性 背景属性 圆角矩形 Chrome 调试工具 -- 查看 CSS 属性 元素的显示模式 盒模型 弹性布局 一、CSS的介绍 层叠样式表 (Cascading Style Sheets). CSS 能够对网页中元素位置的排版进行像素级精…

针对网贷诈骗网站渗透1

开局一张图 二.漏洞分析 2.1 第一套源码漏洞分析 2.1.1 Thinkphp日志泄漏 基于Thinkphp3.2.3开发&#xff0c;前后台分离 默认开启Debug、导致泄漏日志SQL信息、异常缓存 构造Payload&#xff1a;App/Runtime/Logs/21_10_16.log 获取泄漏的admin表账号密码 进入后台 2.1.2 数组…

Docker安装、启动、管理ElasticSearch、ElasticSearch-heade、kibana

一、ElasticSearch 1.1.镜像拉取 docker pull elasticsearch:7.17.13 1.2.启动 docker run -d --name "容器名称" -e "ES_JAVA_OPTS-Xms512m -Xmx512m" -p 9200:9200 -p 9300:9300 elasticsearch:7.17.13启动后使用docker logs查看ES启动日志&#xf…

地表水与地下水耦合模拟

耦合模型被应用到很多科学和工程领域来改善模型的性能、效率和结果&#xff0c;SWAT作为一个地表水模型可以较好的模拟主要的水文过程&#xff0c;包括地表径流、降水、蒸发、风速、温度、渗流、侧向径流等&#xff0c;但是对于地下水部分的模拟相对粗糙&#xff0c;考虑到SWAT…

攻防世界题目练习——Web引导模式(二)

题目目录 1. Web_php_unserialize2. supersqli3. web24. NewsCenter5. Web_python_template_injection6. catcat-new 1. Web_php_unserialize 题目源码&#xff1a; <?php class Demo { private $file index.php;public function __construct($file) { $this->file …

can not remove .unionfs

文件夹下出现unionfs 套娃&#xff0c;无法删除。 处理方式&#xff1a; 需要管理员权限umount之后删除使用fusermount -zu .unionfs &#xff0c;然后再删除。

网络安全(黑客技术)—自学手册

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高&#xff1b; 二、则是发展相对成熟…

STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库)

STM32 CubeMX ADC采集&#xff08;HAL库&#xff09; STM32 CubeMX STM32 CubeMX ADC采集&#xff08;HAL库&#xff09;ADC介绍ADC主要特征Vref的电压&#xff08;2.4~3.6&#xff09;就是ADC参考电压2.4V&#xff08;相当于秤砣&#xff09; 最小识别电压值&#xff1a;2.4/4…

从毕业到创业,普通人如何“逆袭”?

都说当代年轻人在上班和上进之间&#xff0c;选择了上香。尽管如此&#xff0c;仍有人19岁便完成“45天净赚4万”的目标&#xff0c;也有人仅凭两人之力便成功做到“14天推广5000人”。而这些数字的“创造者”&#xff0c;正是龚祖宋。 从求学到求职&#xff0c;年轻人总是面临…

常用的语音芯片工作原理_分类为语音播报 语音识别 语音合成tts

1.0 语音芯片分类-语音播报-语音识别-语音合成 关于声音的需求&#xff0c;从始至终&#xff0c;都是很刚需的需求 。从语音芯片的演化就能看出很多的端倪&#xff0c;很多很多的产品他必须要有语音&#xff0c;才能实现更好的交互。而语音芯片的需求分类&#xff0c;其实也是很…

香港高才通申请详细步骤

去年与同学聊天&#xff0c;同学建议我申请香港优才&#xff0c;说是对孩子以后考学有好处&#xff0c;我家孩子现在还可以赶得上&#xff0c;当时查了一下&#xff0c;但是没有查到具体的就放下忙工作去了&#xff0c;今年刚好公司在宣讲海外留学服务的增值服务时&#xff0c;…