数字图像处理-实验4

news/2024/9/21 0:32:12

实验4:几何变换与变形

实验4.1:图像透视变换

将一幅输入图像变换为任意一个指定的四边形形状(给定四边形4个顶点)。
提示:根据4个顶点的对应估计一个透视变换H,再用H对原图像进行形变(OpenCV相关函数:getPerspectiveTransform, warpPerspective等)
设计一个交互程序,可以编辑四边形顶点,并且顶点位置改变时图像形变的结果可以实时更新。

设计的交互程序如下:

程序共包含两个窗口,主窗口加载原始图像,并通过Qt界面库实现了在原始图像上绘制矩形的功能,拖拽矩形的四个顶点可以自由改变矩形的大小。第二个窗口用于展示变换之后的透视图像,可以在拖动顶点的过程中实时展示变换后的结果。

程序对图像进行变换的代码如下:

void DraggableRect::update_image(){std::vector<cv::Point2f> v;for(auto i:vertices) v.push_back(cv::Point2f(i.x(),i.y()));std::sort(v.begin(),v.end(),[](const cv::Point2f &a,const cv::Point2f &b){return a.x<b.x;});cv::Point2f lt,lb,rt,rb; //左上角,左下角,右上角,右下角if(v[0].y>v[1].y) lb=v[0],lt=v[1];else lb=v[1],lt=v[0];if(v[2].y>v[3].y) rb=v[2],rt=v[3];else rb=v[3],rt=v[2];//std::cout<<lt<<" "<<rt<<" "<<lb<<" "<<rb<<std::endl;//getPerspectiveTransform()需要接受顶点数组,下面将构造顶点数组cv::Point2f s_point[4],t_point[4];s_point[0]={0,0}; s_point[1]=cv::Point2f(Src.cols,0);s_point[2]=cv::Point2f(Src.cols,Src.rows); s_point[3]=cv::Point2f(0,Src.rows);t_point[0]=lt; t_point[1]=rt; t_point[2]=rb; t_point[3]=lb;cv::Mat trans_mat=cv::getPerspectiveTransform(s_point,t_point);cv::warpPerspective(Src,Dst,trans_mat,cv::Size(Dst.cols,Dst.rows));cv::imshow("output",Dst);
}

其中,SrcDstcv::Mat类型的全局变量,分别保存原始图片和变换后的图片。

程序的运行结果如下图所示:

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

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

相关文章

外观

1.加入外观的步骤:外观是GAP服务的一个特征,外观的值是在GAP初始化函数里面设置的,广播初始化时只能选择广播包中是否包含外观,而不能设置外观的值。所以,配置外观的步骤是首先在GAP初始化函数中根据实际应用设置外观特征的值,然后在广播初始化函数中设置包含或不包含外观…

Centos7.9安装部署Gitlab

环境准备系统 IP 配置centos7.9(图形化) 192.168.8.180 2c4g--300GGitlab介绍GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。GitLab由乌克兰程序员DmitriyZaporozhets和ValerySizov开发,它由Ruby写成。后来,一些部分用…

.Net Mvc中JS如何让获取Session

参考来源:C#MVC中JS如何获取Session-百度经验 (baidu.com) 1)将session信息隐藏到界面上,再通过JS找到这个隐藏字段获取值2)页面初始化的时候,直接将session的值赋值给JS变量 3)JS发起一次Ajax请求,从服务器获取session值

【运维自动化-配置平台】如何查看运营数据和审计

操作审计记录了主机、业务等资源纬度的操作记录,也可以根据操作动作来查询操作审计 查看某主机操作历史 包括主机的模块转移、属性修改等查看某业务的操作历史 包括业务、模块、集群、服务模板等资源的变更记录查看资源类型的操作历史查看其他类型的操作历史,如模型分组运营统…

易优eyoucms网站安装时出现“数据库连接失败,请重新设定”的错误

遇到易优CMS在安装时出现“数据库连接失败,请重新设定”的错误,通常是因为数据库连接信息不正确或环境配置问题。以下是一些详细的解决步骤: 解决步骤检查数据库连接信息 检查数据库状态 检查防火墙和安全组设置 检查数据库用户权限 清理安装锁文件 手动导入数据库1. 检查数…

uniapp打包解决模拟器没法安装问题

打开项目的manifest.json文件,在 “App常用其它设置” -> “Android设置” -> “支持CPU类型” 项中勾选需要支持的CPU类型: 参考新文档地址:https://uniapp.dcloud.io/tutorial/app-android-abifilters

易优eyoucms网站本地测试正常,放到虚拟主机出错

遇到在本地测试正常但在虚拟主机上安装时出现问题的情况,通常与环境配置有关。根据您提供的错误信息,问题可能在于文件路径或环境配置不一致。以下是详细的解决步骤: 解决步骤检查文件路径 调整PHP版本 检查文件权限 检查虚拟主机配置1. 检查文件路径 确保文件路径正确无误。…

易优eyoucms网站安装报错 SQLSTATE[HY000]: General error: 1615 Prepared statement needs to be re-prep

遇到“SQLSTATE[HY000]: General error: 1615 Prepared statement needs to be re-prepared”这类错误,通常是由于数据库连接参数配置不当导致的。具体来说,这通常是因为PDO驱动在处理预编译语句时出现了问题。 解决方法 按照以下步骤修改数据库配置文件,可以解决这个问题:…