项目实战:Qt+OpenCV透视变换工具v1.1.0(支持打开图片、输出棋盘角点、调整偏移点、导出变换后的图等等)
需求
1.打开图片;
2.矫正识别角点;
3.四点对应偏移距离;
4.支持设置棋盘格的行列角点数;
5.导出结果图片;
深入研究图像拼接细分支算法,产出的效果查看工具,验证算法单步思路。
《项目实战:Qt+OpenCV透视变换工具v1.1.0(支持打开图片、输出棋盘角点、调整偏移点、导出变换后的图等等)》
《项目实战:Qt+OpenCV仿射变换工具v1.1.0(支持打开图片、输出棋盘角点、调整偏移点、导出变换后的图等等)》
《项目实战:Qt+Opencv相机标定工具v1.3.0(支持打开摄像头、视频文件和网络地址,支持标定过程查看、删除和动态评价误差率,支持追加标定等等)》
《OpenCV开发笔记(〇):使用mingw530_32编译openCV3.4.1源码,搭建Qt5.9.3的openCV开发环境》
《OpenCV开发笔记(三):OpenCV图像的概念和基本操作》
《OpenCV开发笔记(四):OpenCV图片和视频数据的读取与存储》
《OpenCV开发笔记(六):OpenCV基础数据结构、颜色转换函数和颜色空间》
《OpenCV开发笔记(四十六):红胖子8分钟带你深入了解仿射变化(图文并茂+浅显易懂+程序源码)》
《OpenCV开发笔记(五十一):红胖子8分钟带你深入了解透视变换(图文并茂+浅显易懂+程序源码)》
《OpenCV开发笔记(七十六):相机标定(一):识别棋盘并绘制角点》
《OpenCV开发笔记(七十七):相机标定(二):通过棋盘标定计算相机内参矩阵矫正畸变摄像头图像》
#ifndef PERSPECTMANAGER_H
#define PERSPECTMANAGER_H
// opencv
#include "opencv/highgui.h"
#include "opencv/cxcore.h"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/opencv.hpp"
#include "opencv2/xphoto.hpp"
#include "opencv2/dnn/dnn.hpp"
// opencv_contrib
#include <opencv2/xphoto.hpp>
#include <opencv2/ximgproc.hpp>
#include <opencv2/calib3d.hpp>
#include <opencv2/features2d.hpp>
#include <opencv2/xfeatures2d.hpp>
#include <opencv2/xfeatures2d/nonfree.hpp>
#include "cvui.h"
#include <QImage>
#include <QTimer>
class PerspectManager: public QObject
{
Q_OBJECT
public:
explicit PerspectManager(QObject *parent = 0);
~PerspectManager();
public slots:
void testOpencvEnv(); // 测试环境
public:
cv::Point2f getLeftBottomOffsetPoint() const;
cv::Point2f getRightBottomOffsetPoint() const;
cv::Point2f getLeftTopOffsetPoint() const;
cv::Point2f getRightTopOffsetPoint() const;
int getChessboardColCornerCount() const;
int getChessboardRowCornerCount() const;
public:
void setLeftBottomOffsetPoint(const cv::Point2f &offsetPoint);
void setRightBottomOffsetPoint(const cv::Point2f &offsetPoint);
void setLeftTopOffsetPoint(const cv::Point2f &leftTopOffsetPoint);
void setRightTopOffsetPoint(const cv::Point2f &rightTopOffsetPoint);
void setChessboardColCornerCount(int chessboardColCornerCount);
void setChessboardRowCornerCount(int chessboardRowCornerCount);
signals:
void signal_srcImage(QImage image);
void signal_srcImage(cv::Mat mat);
void signal_resultImage(QImage image);
void signal_resultImage(cv::Mat mat);
void signal_inited(bool result);
public slots:
void slot_openImage(QString filePath);
void slot_initImage();
void slot_perspectImage();
protected:
void initControl();
protected: