首页 > 其他分享 >数字图像处理-实验4

数字图像处理-实验4

时间:2024-09-19 11:35:57浏览次数:12  
标签:std 变换 数字图像处理 Point2f 实验 图像 顶点 cv

实验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类型的全局变量,分别保存原始图片和变换后的图片。

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

标签:std,变换,数字图像处理,Point2f,实验,图像,顶点,cv
From: https://www.cnblogs.com/Nartsam/p/18420263

相关文章

  • 11 - TCPClient实验
    在上一个章节的UDP通信测试中,尽管通信的实现过程相对简洁,但出现了通信数据丢包的问题。因此,本章节将基于之前建立的WIFI网络连接,构建一个基础的TCPClient连接机制。我们利用网络调试助手工具来发送数据,测试网络通信中接收到的数据能够准确无误地回传。本节课目标:在本次实验......
  • 基于spring boot的校园计算机实验室管理系统的设计与实现(源码+LW+调试文档+讲解等)
    博主介绍: ......
  • WLAN实验简述
    一:配置生产AP1上级接入层交换机LSW3sys[Huawei]sysnameLSW3[LSW3]undoinfo-centerenable[LSW3]vlanbatch10100[LSW3]intg0/0/2[LSW3-GigabitEthernet0/0/2]portlink-typetrunk[LSW3-GigabitEthernet0/0/2]porttrunkallow-passvlan10100[LSW3-Gigabit......
  • 10 - UDP实验
    在本章节中,我们将采用network与socket这两个第三方库来构建UDP网络连接的功能。具体而言,network库将被应用于WiFi连接的建立,而socket库则基于lwIP协议栈来实现网络协议的连接。在实验环节,我们将利用ESP32开发板与远程网络进行连接,并在此基础上进一步实施UDP连接......
  • 洛阳师范学院 ACM实验室 中秋娱乐赛“月饼代码大逃杀”题解
    题解包括C和C++两种语言_壹我要洋人死!1、直接输出即可C语言题解:#include<stdio.h>intmain(){printf("woyaoyangrensi!");return0;}C++语言题解:#include<iostream>usingnamespacestd;intmain(){ printf("woyaoyangrensi!"); return0;}......
  • 数字图像处理-实验2
    实验E2:图像代数运算实验2.1:对比度调整设计一个Sigmoid函数,实现对图像的对比度调整,并使得调整幅度可以通过参数控制;通过查阅资料得知,Sigmoid函数的标准形式为:其中,x表示输入的像素值,并且可以归一化到[0,1]范围内。k表示的是控制对比度调整幅度的参数,k值越大,图像的对比......
  • 山东大学可视化2024第一次实验
    问题:画出美国1900与2000人口分布介绍:只是一个非常粗糙的可视化模板,注意后续改一下颜色什么的~步骤:1.安装vscode2.下载安装图片中插件3.新建一个文件夹并添加到工作区4.创建一个html文件5.将数据粘贴到文件夹中6.将以下代码粘贴到html文件中<!DOCTYPEhtml><h......
  • TCP协议分析《实验报告》
    一、实验目的1、理解TCP协议;2、掌握TCP协议三次握手建立连接和四次挥手释放连接的过程;3、理解TELNET协议及工作过程;4、掌握TCP协议分析方法。二、实验设备和环境1、硬件设备:PC机或笔记本电脑;2、软件:H3CCloudLab、Wireshark。三、实验记录1、实验环境搭建按照下图在......
  • Linux 基础入门操作-实验二 makefile使用介绍 和 实验三 hello 输出
    1介绍Makefile是linux下的项目管理工具,想象一下当有很多源文件需要编译、链接时,你只需执行make命令即可完成编译操作,这样是不是很方便呢。make命令执行时,需要一个Makefile文件,用来告诉make命令需要怎么样的去编译和链接程序,下面详细介绍Makefile的使用与书写规......
  • Telnet的连接实验
    Telnet的连接实验Windows7虚拟机的Telnet服务由于windows11已经将telnet服务器端移除,为了测试Telnet的连接,要安装Windows7的虚拟机安装VMWare(点击图片跳转)安装光盘在VMVare安装Window7选典型安装在主机Window11/10这边打开客户端服务对虚拟机打开Telnet服......