本文实例为大家分享了opencv实现视场转换的具体代码,供大家参考,具体内容如下

假设我们要实现QUEEN 这张片的视觉转换,使图像转换之后犹如我们正面看过一样

首先打开图形编辑器分别记录这张卡片四个边角的像素点

再利用原扑克的高宽比例 3.5:2.5 重新设置新视角的四边角像素点,具体程序如下所示:

#include <iostream>
#include <opencv2/highgui.hpp> // 说是说gui 具体什么gui 不清楚
#include <opencv2/imgcodecs.hpp> // 图像头文件
#include <opencv2/imgproc.hpp> // 图像处理头文件
using namespace std;
using namespace cv;
float w = 250, h = 350; // 知道卡片的长宽分别为 2.5 cm 和  3.5 cm 因此我们按照比例进行放大所缩小即可
Mat matrix, imgWarp;
int main()
{
    string path = "resources/cards.jpg"; // 导入图形的时候,先要在右边点击显示所有文件!!!
    Mat img = imread(path); // 在opencv 中所有的图像信息都使用Mat 
    /*Queen 卡片*/
    Point2f src[4] = { {66,324},{338,279},{89,634},{404,571} }; // 原坐标点的像素是使用图片编辑器一个个试出来的
    Point2f dst[4] = { {0.0f,0.0f},{w,0.0f},{0.0f,h},{w,h} };
    matrix = getPerspectiveTransform(src, dst);  // 输入原位置比例及目标位置比例,返回Mat类型参量
    warpPerspective(img, imgWarp, matrix, Point(w, h)); // 根据上步获得的参量进行位置改变
    /*在原图像扑克四个顶胶绘制圆点**/
    for (int i = 0; i < 4; i++)
    {
        circle(img, src[i], 10, Scalar(0, 0, 255),FILLED);
    }
 
    /*  king 卡片
    // Point2f 类即点的数据类型为 float 
    Point2f src[4] = { {529,142},{771,190}, {405,395}, {674,457} };
    Point2f dst[4] = { {0.0f,0.0f},{w,0.0f},{0.0f,h} ,{w,h} };
    matrix = getPerspectiveTransform(src, dst);
    warpPerspective(img, imgWarp, matrix, Point(w, h));*/
    imshow("Image", img);
    imshow("Image Warp", imgWarp);
    waitKey(0); // 延时,0即相当于无穷大
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持程序员的世界。

opencv实现视场转换的更多相关文章

  1. C语言的进制转换及算法实现教程

    1、其他进制转十进制1.1、二进制转十进制转换规程: 从最低位开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和,例如:二进制 1011 = 1*2^0 + 1*2^1 + 0*2^2 + 1*2^3 = 1 + 2 + 0 + 8 = 111.2、八制转十进制转换规则: 从最低位开始......

  2. 虚函数表-C++多态的实现原理解析

    参考:http://c.biancheng.net/view/267.html1、说明我们都知道多态指的是父类的指针在运行中指向子类,那么它的实现原理是什么呢?答案是虚函数表在 关于virtual 一文中,我们详细了解了C++多态的使用方式,我们知道没有 virtual 关键子就没法使用多态2、虚函......

  3. C++实现将长整型数转换为字符串的示例代码

    C++实现将长整型数转换为字符串/** Created by Chimomo*/#include <iostream>using namespace std;char *convertLongToStr(long L) {int i = 1;int n = 1;while (!(L / ......

  4. std::async的使用总结

    C++98标准中并没有线程库的存在,直到C++11中才终于提供了多线程的标准库,提供了管理线程、保护共享数据、线程间同步操作、原子操作等类。多线程库对应的头文件是#include ,类名为std::thread。然而线程毕竟是比较贴近系统的东西,使用起来仍然不是很方便,特别是线程同步及获取线程运行结......

  5. 关于 C++ 中的强制转换 - 基础篇

    引言假设有基类 A,包含了虚函数 func1,以及有派生类 B,继承于类 A,派生类 B 中实现了函数 func1。此时可以用 A 类型的指针指向 B 类型的对象,并用 A 类型的指针调用 B 类型对象中的函数 func1。这时,就形成了多态。包含虚函数的类 A,我们也称为多态类。由于派生类 B 完......

  6. OpenCV 之 图象几何变换

    二维平面中,图像的几何变换有等距、相似、仿射、投影等,如下所示: 1 图象几何变换1.1 等距变换 等距变换 (Isometric Transformation),是一种二维的刚体变换,可理解为旋转和平移的组合 $\quad \beg......

  7. std::async的使用总结

    C++98标准中并没有线程库的存在,直到C++11中才终于提供了多线程的标准库,提供了管理线程、保护共享数据、线程间同步操作、原子操作等类。多线程库对应的头文件是#include ,类名为std::thread。然而线程毕竟是比较贴近系统的东西,使用起来仍然不是很方便,特别是线程同步及获取线程运行结......

  8. C/C++内存对齐详解

    1、什么是内存对齐 还是用一个例子带出这个问题,看下面的小程序,理论上,32位系统下,int占4byte,char占一个byte,那么将它们放到一个结构体中应该占4+1=5byte;但是实际上,通过运行程序得到的结果是8 byte,这就是内存对齐所导致的。 //32位系统 #inclu......

  9. 关于C语言中数据在内存中的存储详解

    前言1. 数据类型详细介绍2. 整形在内存中的存储:原码、反码、补码3. 大小端字节序介绍及判断4. 浮点型在内存中的存储解析一、数据类型介绍1.类型的基本归类1.整形家族charunsigned charsigned charshortunsigned short [int]signed shor......

  10. C++ 控制台弹出文件管理对话框案例

    在控制台程序中打开文件管理对话框,效果图如下所示:在需要弹出对话框的地方插入以下代码://打开文件管理窗口TCHAR szBuffer[MAX_PATH] = { 0 };OPENFILENAME file = { 0 };file.hwndOwner = NULL;file.lStructSize......

随机推荐

  1. sqlserver 实现收缩数据库日志操作

    说明:收缩日志的原因有很多种,有些是考虑空间不足,有些则是应用程序限制导致的。--将“恢复模式”设置为“简单”ALTER DATABASE xszzxt_test SET RECOVERY SIMPLE GO--收缩日志文件大小到10MDBCC SHRINKFILE (N'xszzxt_test_l......

  2. select下拉框option的样式修改

    select原样式:进行样式修改后的样式: 附上修改代码://select外面必须包裹一个div,用来覆盖select原有的样式 <div class="option"><select name=""><option valu......

  3. 一个非常棒的Go-Json解析库

    json是一种数据格式,经常被用作数据交换,页面展示,序列化等场景,基本每种语言都有对应的json解析框架,Go语言也不例外,并且内置了json库,基本能够满足一些普通开发场景,但有些复杂场景下就不太理想了,因此找一个好用的开源的json库就非常有必要了,先放地址https://github.com......

  4. 在JavaScript中查找字符串中最长单词的三种方法(推荐)

    本文基于Free Code Camp基本算法脚本“查找字符串中最长的单词”。在此算法中,我们要查看每个单词并计算每个单词中有多少个字母。然后,比较计数以确定哪个单词的字符最多,并返回最长单词的长度。在本文中,我将解释三种方法。首先使用FOR循环,其次使用sort()方法,第三次使用reduce()方......

  5. 使用 React 和 Threejs 创建一个VR全景项目

    最近我在学习使用 React 配合 Three.js 来搭建一个可以浏览720全景图片的项目实现的是加载一张 2:1 的720全景分享一下我的创建过程一、搭建框架并安装需要的插件npx create-react-app parano // 创建一个 React 项目npm install -S ty......

  6. php中yum命令用法详解

    在php中关于yum命令还是比较多的,主要是因为在配置linux环境,linux中安装、卸载等各种操作中,因此,掌握命令还是相当重要的,在很多命令中,最常见使用的就是yum命令,总共有七个yum命令,每一种使用操作都相当的实用,下面就这些命令,详细给大家做下讲解。1、yum install命令表示安......

  7. ASP.NET Core中使用LazyCache的全过程

    前言 微软的 ASP.NET Core 已经是一个非常流行的用于构建 高性能, 模块化 并能运行在 Windows, Linux, MacOS 上的 WEB 框架,通常能够让程序保持高性能的一个有效途径就是通过缓存热链上的数据来应对高频的请求。 LazyCache 是一款基于内存的易于使用和线程安全......

  8. pytorch实现线性回归以及多元回归

    本文实例为大家分享了pytorch实现线性回归以及多元回归的具体代码,供大家参考,具体内容如下最近在学习pytorch,现在把学习的代码放在这里,下面是github链接直接附上github代码# 实现一个线性回归# 所有的层结构和损失函数都来自于 torch.nn# torch.optim 是一个实......

  9. PyQt5 QLineEdit输入的子网字符串校验QRegExp实现

    自己编写的用于对lineEdit编辑框输入的子网,例如:192.168.60.1/24字符串校验是否合规。# 限制lineEdit编辑框只能输入./字符和数字reg = QRegExp('[0-9./]+$')validator = QRegExpValidator(self)validator.s......

  10. 如何不使用 overflow: hidden 实现 overflow: hidden

    一个很有意思的题目。如何不使用 overflow: hidden 实现 overflow: hidden?CSS 中 overflow 定义当一个元素的内容太大而无法适应块级格式化上下文时候该做什么。而 overflow: hidden 则会将超出容器范围内的内容剪裁。控制 overflow: hi......