上位机图像处理和嵌入式模块部署(qmacvisual透视变换)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        说到透视变换,以前我也不明白为什么有这样一个需求。后来在tier1做车道线检测的时候,才知道如果把camera拍摄到的图像做一次透视转换之后,再用传统的方法进行车道线检测,这样正确率要高得多。也就是基于这个原因,才让我第一次知道了opencv下面原来有一个透视变换的功能。如果大家还没有一个直观的印象,可以看下面这个范例。没有透视转换之前,图象是这样的,

        做了透视转换之后,图像变成了这样,

        可以想一想,如果我们需要做ocr字符检测,是不是变换后的图像更容易做字符检测和字符识别。或者简单一点理解,可以把透视变换看成是带俯仰角的旋转变换。

1、创建工程和创建流程

        在qmacvisual当中,第一步还是创建工程和创建流程,这是少不了的。

2、输入图片

        输入图片直接采用【图像处理】里面的【获取图像】,这一步之前也练习了很多次,暂且不谈。

3、导入透视变换的控件

        透视变换的控件,它的位置位于【图像处理】下面。我们直接从树形节点,把对应的控件拖到流程窗口中即可。双击对应的窗口,不出意外,可以看到这样的内容,

        整个图像中,有两处需要配置。一处是输入图像,这部分比较简单。另外一处是输入点和输出点。所谓的输入点,就是源图像中关键区域的位置信息,而输出点呢,则是希望转换后区域所在的位置。对于输入点,一般是通过鼠标移动的方式,来进行位置信息获取的,获取之后用全局变量记录下来。而输出点,一般就是自己简单规划下即可。这样有了输入点和输出点,就可以构建一个旋转矩阵,有了这个矩阵就可以把原来的图像转换成新的图像。这就是透视变换的基本原理。

        图中的var0~var7,都是全局变量中定义的,

4、测试流程

        整个测试流程可以稍微拓展下,添加图像导入和透视变换之外,再添加一个图像显示,这样效果更好一点。

5、实现方法

        通过阅读透视变换的原理,我们发现整个实现的流程并不复杂。最关键的部分还是如何计算透视转换矩阵。这部分可以在代码上面看的比较明显一点,

int frmPerspectiveTransform::RunToolPro()
{try{//其他代码//创建用于输入透视的四个点坐标std::vector<cv::Point2f> src ={input_point1,input_point2,input_point3,input_point4};//创建用于输出透视的四个点坐标std::vector<cv::Point2f> dst ={output_point1,output_point2,output_point3,output_point4};//获取透视矩阵cv::Mat data = cv::getPerspectiveTransform(src, dst);//进行透视操作cv::warpPerspective(srcImage, dstImage, data, srcImage.size());GetToolBase()->m_Tools[tool_index].PublicImage.OutputImage = dstImage;GetToolBase()->m_Tools[tool_index].PublicResult.State = true;return 0;}catch (...){GetToolBase()->m_Tools[tool_index].PublicResult.State = false;return -1;}
}

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

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

相关文章

Delphi模式编程

文章目录 Delphi模式编程涉及以下几个关键方面&#xff1a;**设计模式的应用****Delphi特性的利用****实际开发中的实践** Delphi模式编程的实例 Delphi模式编程是指在使用Delphi这一集成开发环境&#xff08;IDE&#xff09;和Object Pascal语言进行软件开发时&#xff0c;采用…

PHP运行的注意事项和基本语法规范

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

JavaSE day15 笔记

第十五天课堂笔记 数组 可变长参数★★★ 方法 : 返回值类型 方法名(参数类型 参数名 , 参数类型 … 可变长参数名){}方法体 : 变长参数 相当于一个数组一个数组最多只能有一个可变长参数, 并放到列表的最后parameter : 方法参数 数组相关算法★★ 冒泡排序 由小到大: 从前…

Linux网络配置(超详细)

Linux网络配置大全 Linux网络配置一.网络地址配置网络地址查看–ifconfig使用网络配置命令设置网络接口参数-ifconfig禁用(临时)或者重新激活网卡设置虚拟网络接口 修改网络配置文件网络接口配置文件 IP命令详解OPTIONS选项OBJECT对象 ip link 二、获取和修改主机名hostname查看…

java电话号码的字母组合(力扣Leetcode17)

电话号码的字母组合 力扣原题链接 问题描述 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 示例 1&#xff1a;…

谷粒商城实战(007 压力测试)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第141p-第p150的内容 简介 安装jmeter 安装jmeter 使用中文 这样写就是200个线程循环100次 一共是2万个请求 介绍线程组 添加请求 可以是htt…

计算机视觉的应用26-关于Fast-R-CNN模型的应用场景,Fast-R-CNN模型结构介绍

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用26-关于Fast-R-CNN模型的应用场景&#xff0c;Fast-R-CNN模型结构介绍。Fast R-CNN是一种深度学习模型&#xff0c;主要用于目标检测任务&#xff0c;尤其适用于图像中物体的识别与定位。该模型在基…

【JVM】JVM类加载过程

文章目录 &#x1f334;类加载过程&#x1f338;加载&#x1f338;加载&#x1f338;验证&#x1f338;准备&#x1f338;解析&#x1f338;初始化 &#x1f332;双亲委派模型&#x1f338;什么是双亲委派模型&#xff1f;&#x1f338;双亲委派模型的优点 ⭕总结 &#x1f334…

uniapp实现的数据选择器,支持H5、微信小程序

采用uniapp-vue3实现的数据选择器&#xff0c;支持H5、微信小程序&#xff08;其他小程序未测试过&#xff0c;可自行尝试&#xff09; 支持本地自定义过滤、远程接口过滤&#xff0c;为了避免弹窗面板超出边界的情况&#xff0c;自动计算弹窗面板安置的位置&#xff08;在微信…

对 CSS 工程化的理解

CSS 工程化是为了解决以下问题&#xff1a; 宏观设计&#xff1a;CSS 代码如何组织、如何拆分、模块结构怎样设计&#xff1f;编码优化&#xff1a;怎样写出更好的 CSS&#xff1f;构建&#xff1a;如何处理我的 CSS&#xff0c;才能让它的打包结果最优&#xff1f;可维护性&a…

OpenMV与STM32之间的通信(附源码)

本篇文章旨在记录我电赛期间使用openmv和stm32单片机之间进行串口通信&#xff0c;将openmv识别到的坐标传输给单片机。背景是基于2023年全国大学生电子设计大赛E题&#xff1a;舵机云台追踪识别。 单片机的串口通信原理我便不再详细讲解&#xff0c;下面直接上代码分析。 值得…

wireshark创建显示过滤器实验简述

伯克利包过滤是一种在计算机网络中进行数据包过滤的技术&#xff0c;通过在内核中插入过滤器程序来实现对网络流量的控制和分析。 在数据包细节面板中创建显示过滤器&#xff0c;显示过滤器可以在wireshark捕获数据之后使用。 实验拓扑图&#xff1a; 实验基础配置&#xff1…

HTML input 实现回车切换到下一个输入框功能

前言 遇到需求&#xff0c;在客户填写单子时&#xff0c;有多个输入框&#xff0c;为了省事&#xff0c;不需要频繁移动光标填写。 实现效果 实现方式一 HTML <input type"text" name"serialNumber1" onkeydown"cursor(this);"/><in…

阿里云魔搭发起“ModelScope-Sora开源计划”,将为中国类Sora模型开发提供一站式工具链

在2024年3月23日的全球开发者先锋大会上&#xff0c;阿里云的魔搭社区宣布了一个新计划&#xff1a;“ModelScope-Sora开源计划”。这个计划旨在通过开源方式&#xff0c;帮助中国在Sora模型类型上做出更多创新。这个计划提供了一整套工具&#xff0c;包括处理数据的工具、多模…

Web开发-Django学习笔记

客户端如何获取服务端的数据信息&#xff1f; 通常 是 HTTP网络协议&#xff0c;通过网络传输数据信息。 客户端通过HTTP协议发送请求信息给服务端&#xff0c;并从服务端接收响应信息。 Web 前端开发&#xff1a; &#xff08;HTML、CSS、JS&#xff09;文件部署在后端服务…

Vidmore Video Fix for Mac 视频修复工具

Vidmore Video Fix for Mac是一款功能强大且易于使用的视频修复工具&#xff0c;专为Mac用户设计。它凭借先进的视频修复技术&#xff0c;能够帮助用户解决各种视频问题&#xff0c;如视频文件损坏、无法播放、格式不支持等。 软件下载&#xff1a;Vidmore Video Fix for Mac v…

QT资源添加调用

添加资源文件&#xff0c;新建资源文件夹&#xff0c;命名resource&#xff0c;然后点下一步&#xff0c;点完成 资源&#xff0c;右键add Prefix 添加现有文件 展示的label图片切换 QLabel *led_show; #include "mainwindow.h" #include<QLabel> #include&l…

67、yolov8目标检测和旋转目标检测算法部署Atlas 200I DK A2开发板上

基本思想&#xff1a;需求部署yolov8目标检测和旋转目标检测算法部署atlas 200dk 开发板上 一、转换模型 链接: https://pan.baidu.com/s/1hJPX2QvybI4AGgeJKO6QgQ?pwdq2s5 提取码: q2s5 from ultralytics import YOLO# Load a model model YOLO("yolov8s.yaml")…

Spring-01

Spring 1.Spring是什么? spring是一个开源的Java应用框架&#xff0c;它提供了一套全面的基础设施支持 2.Spring框架的主要特点 1&#xff09;依赖注入&#xff08;Dependency Injection&#xff0c;DI&#xff09; 2&#xff09;面向切面编程&#xff08;AOP&#xff09…

如何使用剪映专业版剪辑视频

1.操作界面功能介绍 2.时间线的使用 拖动前端后端缩减时长&#xff0c;有多个素材可以拖动调节前后顺序拼接。 分割视频 删除