opencv实现视场转换

 更新时间:2021年04月16日 11:33:32   作者:努力的小带土  
这篇文章主要为大家详细介绍了opencv实现视场转换,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了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即相当于无穷大
}

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

您可能感兴趣的文章:

相关文章

  • C 标准I/O库的粗略实现教程

    C 标准I/O库的粗略实现教程

    下面小编就为大家分享一篇C 标准I/O库的粗略实现教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • 浅析c#中如何在form的webbrowser控件中获得鼠标坐标

    浅析c#中如何在form的webbrowser控件中获得鼠标坐标

    以下是对c#中如何在form的webbrowser控件中获得鼠标坐标的实现方法进行了详细的分析介绍,需要的朋友可以参考下
    2013-07-07
  • C语言圣诞树的实现示例

    C语言圣诞树的实现示例

    本篇主要介绍了C语言圣诞树的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • C语言数据结构之线索二叉树及其遍历

    C语言数据结构之线索二叉树及其遍历

    这篇文章主要介绍了C语言数据结构之线索二叉树及其遍历的相关资料,为了加快查找节点的前驱和后继。对二叉树的线索化就是对二叉树进行一次遍历,在遍历的过程中检测节点的左右指针是否为空,如果是空,则将他们改为指向前驱和后继节点的线索,需要的朋友可以参考下
    2017-08-08
  • C++文件读和写的使用

    C++文件读和写的使用

    本文主要介绍了C++文件读和写的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Qt图形图像开发之QT滚动区控件(滚动条)QScrollArea的详细方法用法图解与实例

    Qt图形图像开发之QT滚动区控件(滚动条)QScrollArea的详细方法用法图解与实例

    这篇文章主要介绍了Qt图形图像开发,QT滚动区控件(滚动条)QScrollArea的详细方法用法图解与实例,需要的朋友可以参考下
    2020-03-03
  • C++11 智能指针之shared_ptr代码详解

    C++11 智能指针之shared_ptr代码详解

    这篇文章主要介绍了 C++11 智能指针之shared_ptr的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • C语言详解结构体的内存对齐与大小计算

    C语言详解结构体的内存对齐与大小计算

    C 数组允许定义可存储相同类型数据项的变量,结构是 C 编程中另一种用户自定义的可用的数据类型,它允许你存储不同类型的数据项,本篇让我们来了解C 的结构体内存对齐与计算大小
    2022-04-04
  • C语言中数据的存储详解

    C语言中数据的存储详解

    这篇文章主要介绍了C语言中数据的存储详解的相关资料,需要的朋友可以参考下
    2023-08-08
  • C++结构体中变长数组的使用问题分解刨析

    C++结构体中变长数组的使用问题分解刨析

    变长数组在C++中指的是集合(也叫容器)如vector就是C语言中,所有的数组都不定长,没有下标越界的概念,数组实质就是一个指针(由数组名充当)因此C语言中数组的长度没有任何意义平常在C语言中讲的不定长数组,其实就是指针
    2022-08-08

最新评论