当前位置:首页 » 《资源分享》 » 正文

项目实战:Qt+OpenCV仿射变换工具v1.1.0(支持打开图片、输出棋盘角点、调整偏移点、导出变换后的图等等)

8 人参与  2024年11月18日 15:22  分类 : 《资源分享》  评论

点击全文阅读


若该文为原创文章,转载请注明出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/143105881

长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…

Qt开发专栏:项目实战(点击传送门)


需求

  1.打开图片;
  2.矫正识别角点;
  3.opencv摄像头操作子线程处理;
  4.支持设置棋盘格的行列角点数;


背景

  深入研究图像拼接细分支算法,产出的效果查看工具,验证算法单步思路。


相关博客

  《项目实战:Qt+Opencv相机标定工具v1.3.0(支持打开摄像头、视频文件和网络地址,支持标定过程查看、删除和动态评价误差率,支持追加标定等等)》
  《OpenCV开发笔记(〇):使用mingw530_32编译openCV3.4.1源码,搭建Qt5.9.3的openCV开发环境》
  《OpenCV开发笔记(三):OpenCV图像的概念和基本操作》
  《OpenCV开发笔记(四):OpenCV图片和视频数据的读取与存储》
  《OpenCV开发笔记(六):OpenCV基础数据结构、颜色转换函数和颜色空间》
  《OpenCV开发笔记(四十六):红胖子8分钟带你深入了解仿射变化(图文并茂+浅显易懂+程序源码)》
  《OpenCV开发笔记(七十六):相机标定(一):识别棋盘并绘制角点》
  《OpenCV开发笔记(七十七):相机标定(二):通过棋盘标定计算相机内参矩阵矫正畸变摄像头图像》


Demo:affineTool_v1.1.0 windows运行包

  在这里插入图片描述

  在这里插入图片描述
  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述
  CSDN粉丝0积分下载:https://download.csdn.net/download/qq21497936/89908724
  QQ群:博客首页扫码进入QQ技术群,点击“文件”搜索“affineTool”,群内与博文同步更新)


模块化部署

  在这里插入图片描述

关键源码

AffineManager.h

#ifndef AFFINEMANAGER_H#define AFFINEMANAGER_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 AffineManager: public QObject{    Q_OBJECTpublic:    explicit AffineManager(QObject *parent = 0);    ~AffineManager();public slots:    void testOpencvEnv();                       // 测试环境public:    cv::Point2f getLeftBottomOffsetPoint() const;    cv::Point2f getCenterTopOffsetPoint() const;    cv::Point2f getRightBottomOffsetPoint() const;    int getChessboardColCornerCount() const;    int getChessboardRowCornerCount() const;public:    void setLeftBottomOffsetPoint(const cv::Point2f &offsetPoint);    void setRightBottomOffsetPoint(const cv::Point2f &offsetPoint);    void setCenterTopOffsetPoint(const cv::Point2f &offsetPoint);    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_affineImage();protected:    void initControl();protected:    bool findChessboard(int rowCornerCount, int colCornerCount, cv::Mat &mat, std::vector<cv::Point2f> &vectorPoint2fCorners);public:    static QImage mat2Image(cv::Mat mat);      // cv::Mat 转 QImageprivate:    cv::Mat _mat;                       // 缓存一帧    cv::Mat _resultMat;                 // 结果    int _chessboardColCornerCount;      // 一列多少个角点    int _chessboardRowCornerCount;      // 一行多少个角点private:                                // 计算内参和畸变系数    cv::Mat _cameraMatrix;              // 相机矩阵(接收输出)    cv::Mat _distCoeffs;                // 畸变系数(接收输出)    std::vector<cv::Mat> _rotate;       // 旋转量(接收输出)    std::vector<cv::Mat> _translate;    // 偏移量(接收输出)    cv::Point2f _leftBottomPoint; // 仿射三点,对应原始    cv::Point2f _rightBottomPoint;// 仿射三点,对应原始    cv::Point2f _centerTopPoint;  // 仿射三点,对应原始    cv::Point2f _leftBottomOffsetPoint; // 仿射三点,对应偏移    cv::Point2f _rightBottomOffsetPoint;// 仿射三点,对应偏移    cv::Point2f _centerTopOffsetPoint;  // 仿射三点,对应偏移};#endif // AffineManager_H

AffineManager.cpp

...void AffineManager::slot_affineImage(){    cv::Point2f srcTraingle[3];    cv::Point2f dstTraingle[3];    srcTraingle[0] = _leftBottomPoint;    srcTraingle[1] = _rightBottomPoint;    srcTraingle[2] = _centerTopPoint;    dstTraingle[0] = _leftBottomPoint  + _leftBottomOffsetPoint;    dstTraingle[1] = _rightBottomPoint + _rightBottomOffsetPoint;    dstTraingle[2] = _centerTopPoint   + _centerTopOffsetPoint;    cv::Mat mat = cv::getAffineTransform(srcTraingle, dstTraingle);    std::cout << srcTraingle[0] << srcTraingle[1] << srcTraingle[2] << endl;    std::cout << dstTraingle[0] << dstTraingle[1] << dstTraingle[2] << endl;    cv::warpAffine(_mat, _resultMat, mat, cv::Size(_mat.cols, _mat.rows));    QImage image = mat2Image(_resultMat);    emit signal_resultImage(image);}...

入坑

  算法的研究优化过程中,思路需要开拓编写代码,查看效果,逐步研究出算法的优化路径,坑多暂时未记录。


本文章博客地址:https://hpzwl.blog.csdn.net/article/details/143105881


点击全文阅读


本文链接:http://zhangshiyu.com/post/188240.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 寒星碎梦不回舟(顾知舟安千雪)阅读 -
  • 穿越八零替嫁后我成了军官心尖宠完结版小说(杨念念陆时深)全文免费阅读无弹窗大结局_(穿越八零替嫁后我成了军官心尖宠完结版免费阅读全文大结局)最新章节列表_笔趣阁(穿越八零替嫁后我成了军官心尖宠完结版) -
  • 偏执占有完整版阅读沈黎月蒋美云(沈黎月蒋美云)全文免费阅读无弹窗大结局_(沈黎月蒋美云)偏执占有完整版阅读小说最新章节列表_笔趣阁(沈黎月蒋美云) -
  • 顾瑶陆泽免费阅读_顾瑶陆泽小说全文阅读笔趣阁
  • 《温玉溪陆霆琛》已完结小说全文阅读笔趣阁《温玉溪陆霆琛》
  • 最新好看小说推荐女朋友带全家白嫖我新年旅行(陈茜茜陈娇娇岩辉)_女朋友带全家白嫖我新年旅行(陈茜茜陈娇娇岩辉)完整版小说免费阅读
  • 和双胞胎姐姐互换身份后,老公悔疯了(林尔陈鸢)完本小说免费_全本免费小说和双胞胎姐姐互换身份后,老公悔疯了最新小说全文阅读(林尔陈鸢)
  • 最新热门小说斩断因果后,魔主跳出三界寻我_顾怜声林墨最热门小说_免费完结版小说(顾怜声林墨)
  • 春风有情难寻桃花(裴淮州沈轻语)免费阅读 -
  • 拨雪逢春,得见青山(江雨宁沈言澈)免费阅读 -
  • 我选光头大魔王很合理吧全章节(陈业唐紫尘)全文免费阅读无弹窗大结局_(陈业唐紫尘)我选光头大魔王很合理吧全章节小说最新章节列表_笔趣阁(我选光头大魔王很合理吧全章节) -
  • 《拼命挣钱给男友治病后,发现男友在装穷》无删减章节目录在线阅读

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1