opencv实现视场转换
短信预约 -IT技能 免费直播动态提醒
本文实例为大家分享了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
Point2f class="lazy" data-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(class="lazy" data-src, dst); // 输入原位置比例及目标位置比例,返回Mat类型参量
warpPerspective(img, imgWarp, matrix, Point(w, h)); // 根据上步获得的参量进行位置改变
for (int i = 0; i < 4; i++)
{
circle(img, class="lazy" data-src[i], 10, Scalar(0, 0, 255),FILLED);
}
imshow("Image", img);
imshow("Image Warp", imgWarp);
waitKey(0); // 延时,0即相当于无穷大
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341