温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

opencv怎么实现视场转换

发布时间:2021-04-16 14:20:32 来源:亿速云 阅读:268 作者:小新 栏目:开发技术

这篇文章给大家分享的是有关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怎么实现视场转换”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI