5、OPENCV视场转换

el/2024/3/2 11:06:41

假设我们要实现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即相当于无穷大
}

 


http://www.ngui.cc/el/3574172.html

相关文章

6、OPencv 颜色检测

若要在OPencv 中实现颜色检测&#xff0c;首先要将待检测图像转换到HSV颜色空间中&#xff0c;但因为颜色是一个特定的取值范围&#xff0c;并且在我们不知情的情况下&#xff0c;只能通过TrackBar 来控制颜色阈值&#xff0c;用以探究各颜色的取值范围。 程序&#xff1a; #…

11、车牌识别

本程序的目的是为了识别行驶过程中的车牌&#xff0c;并且通过.png文件将车牌照片保存在对应路径中。首先分类器导入对应xml文件接着借助分类器的detectMultiScale函数来检测车牌。 具体代码如下&#xff1a; #include <iostream> #include <opencv2/highgui.hpp>…

Qt制作简单的折线图

首先在.pro添加 QT Charts &#xff1b; 若使用的是VS编程软件&#xff0c;具体操作如下所示&#xff1a; 勾选charts文件 下面直接给出代码 #include "QtGuiApplication1.h" #include <QtWidgets/QApplication> #include <QtWidgets/QMainWindow> #…

QListWidget类的用法

本教程通过举例来讲解QListWidget的用法 首先申明一个QListWidget类&#xff0c;通过setSelectionMode&#xff08;&#xff09;&#xff0c;来设置QListWidget的Item选择模式&#xff1a; listWidget new QListWidget(this); listWidget->setSelectionMode(QAbstractIte…

VS无法打开qt中的ui文件

解决方案&#xff1a; 即可。

qt中的foreach用法

直接上代码&#xff1a; QStringList test;test.append("aaaa");test.append("bbbb");test.append("cccc");QString tempa;QString tempb;int i 0;foreach(tempa, test){qDebug() << tempa << endl;if(1i)tempb tempa;i;}qDebug()…

松下A6全闭环控制模式参数调节

使用分辨率0.05微米的绝对式光栅尺&#xff0c;导轨螺距5毫米电机。 要实现闭环控制先将 pr001 设置为 6 (全闭环控制模式) pr004设置为300 (惯量比) pr00.3设置为11(刚性设定) &#xff0c;因为需要拉动电机故将这两个参数调大 pr008 不需要设置&#xff0c;因为在闭环控制…

1、有趣的指针

1、今天发现指针数组一个有趣的现象&#xff0c;众所周知&#xff0c;数组是基于指针而生成的&#xff0c;故指针和数组是可以进行相互转换&#xff0c;如下所示&#xff1a; int num[20]; num[1] *(num1); 但指针和数组还是存在不同点&#xff0c;其中之一便是指针名称是变…

自动存储、静态存储、动态存储

自动存储 在函数内部定义的常规变量使用自动存储空间&#xff0c;被称为自动变量&#xff08;automatic variable&#xff09;&#xff0c;意味着它们所属的函数被调用时自动产生&#xff0c;在该函数结束时消亡。 自动变量是一个局部变量&#xff0c;其作用域为包含它的代码…

continue在while和for循环中的区别

二刷primerPlus的时候发现了一个很有趣的细节&#xff0c;大家都知道continue的作用是跳过本次循环的剩余部分而直接开启下次循环。那么在for循环中&#xff0c;continue将跳转到更新表达式&#xff0c;然后跳到测试表达式处。而在while循环中&#xff0c;continue将直接跳转到…